数字的二叉树,具有节点结构
type def numbernode
{
unsigned value;
numbernode * left;
numbernode * right;
}
和外部指针(到根节点) 写一个函数 在最大(numbernode *树) 如果树不为空,将返回树中的最大数字。如果树是空的,你的函数应该返回-1。
这是一个测试的练习题,我花了好几个小时试图搞清楚,我需要一些代码帮助!!
答案 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)
您是否知道树遍历算法(按顺序,预订,后订购)?
画一棵简单的树,用铅笔做一些步骤。在子树中的某个时刻,尝试“概括”一个适用于子树的描述,然后看看你是否能够提出一个“保持”适用于整个树的描述。