C ++在二叉树中查找最大数字

时间:2011-05-02 18:15:12

标签: c++ binary-tree

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

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

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

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

5 个答案:

答案 0 :(得分:8)

一旦你开始以正确的方式思考它们,递归问题就很容易解决,特别是在树木方面。 “这棵树中最大的数字是多少?它是我自己,我的左孩子和我的右孩子中最高的...我的左孩子中最高的是什么?它是那个孩子的最高点,它的左边和它的对......“等等。

非常简单的递归问题。

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 );
}

答案 1 :(得分:5)

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

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
}

这是基本的想法。你走下当前节点的子节点,然后返回结果,看看它们的结果是否比你的好。最高价值将在链条上发挥作用。

P.S。我的代码中的语法完全错误。例如,没有分号。它也忽略了指针或任何东西。可以把它想象成只有C ++友好的伪代码。

答案 2 :(得分:2)

使用任何已知的有序,预订或后序方法对树进行遍历。在遍历期间,您必然会遇到最大的元素。

答案 3 :(得分:0)

只需走到树的右侧并返回最后一个非空节点。

答案 4 :(得分:0)

您是否知道树遍历算法(按顺序,预订,后订购)?

画一棵简单的树,用铅笔做一些步骤。在子树中的某个时刻,尝试“概括”一个适用于子树的描述,然后看看你是否能够提出一个“保持”适用于整个树的描述。