【问题标题】:C++ Finding largest number in binary treeC ++在二叉树中查找最大数
【发布时间】:2016-10-06 12:59:29
【问题描述】:

数字的二叉树,具有节点结构

type def numbernode
{
    unsigned value;
    numbernode * left;
    numbernode * right;
}

和一个外部指针(指向根节点) 写一个函数 在最大(numbernode * 树) 如果树不为空,将返回树中的最大数。如果树为空,您的函数应返回 -1。

这是一个测试练习题,我花了好几个小时试图弄清楚,我需要一些代码帮助!!

【问题讨论】:

  • 如果您花费了几个小时,请向我们展示您尝试过的一些方法,然后我们可以提供帮助。

标签: c++ binary-tree


【解决方案1】:

一旦您开始以正确的方式思考递归问题,就很容易解决递归问题,尤其是关于树的问题。 “树中最大的数字是多少?嗯,它是我自己、我的左孩子和我的右孩子中最高的……我的左孩子中最高的数字是多少?嗯,它是那个孩子中最高的,它的左边和它的对……”等等。

非常简单的递归问题。

int largest( node* root )
{
    if ( root == null )
        return -1;

    int left = largest(root->left);
    int right = largest ( root->right);
    if( root->value > left && root->value > right )
       return root->value;
    else
       return max ( left, right );
}

【讨论】:

  • 我明白了,所以我继续在中添加了解释
【解决方案2】:

递归是你的朋友 - 这是大纲

int maxValue(Node n) {

    if(n == null) return -1 // if this is a null node, get out with -1

    // each time you call this, it spawns a new version of this function
    // calling maxValue(root) could end up calling maxValue on a .left node
    // dozens of times before it calls one on a .right node!
    int left = maxValue(n.left) // get the left value's max
    int right = maxValue(n.right) // get the right value's max

    return max(this.value, left, right) // return the highest of the three values
}

这是基本思想。你顺着当前节点的子节点下去,取回结果,看看他们的结果是不是比你的好。最高的价值将沿着链条向上。

附:我的代码中的语法完全错误。例如,没有分号。它也忽略指针或任何东西。仅将其视为 C++ 友好的伪代码。

【讨论】:

  • 我正在挖掘这篇旧帖子,但是如果树包含的所有值都小于 -1,我们该怎么办?
【解决方案3】:

只需使用任何已知的中序、前序或后序方法遍历树。在遍历过程中,你必然会遇到最大的元素。

【讨论】:

    【解决方案4】:

    只要走到树的右边,返回最后一个非空节点。

    【讨论】:

    • 它没有说二叉搜索树,也没有说它以任何方式排序。
    • 二叉树不一定是有序的。你混淆了二叉树和二叉搜索树,我会说
    • 首先将数字存储在树中的意义何在?我知道这是我的假设,并且比较可能不是 比较。除此之外,要点。
    • 所以 - 我可以找出几十个为什么我将无序数字存储在二叉树中的原因。哎呀,即使在不平衡的情况下。 (即使是用数字标识的对象只是为了扩展想象力)。这会发生在不仅与节点有关,还与边缘有关的情况下
    • 在编程测试问题的上下文中,我认为假设整数是值而不是指向外部数据的指针或 id 是合理的。诚然,人们可以想出很多不同的理由,但在测试问题的背景下,我不觉得我的回答是不合理的。另外,我很清楚其中的区别,但无论如何,谢谢你的教训。
    【解决方案5】:

    你知道树遍历算法(按序、前序、后序)吗?

    画一棵简单的树,然后用铅笔完成步骤。在子树的某个点上,尝试“概括”适用于子树的描述,然后看看您是否能想出一个“继续”适用于整个树的描述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 2018-06-29
      • 2020-11-01
      相关资源
      最近更新 更多