1、问题
在二叉树中寻找值最大的节点并返回。
给出如下一棵二叉树:
1
/ \
-5 2
/ \ / \
0 3 -4 -5
返回值为 3
的节点。
2、思路
首先将根节点与一个无限小的数比较,若根节点大于它将根节点的值赋给它,并且将根节点付给一个临时指针变量。
用递归遍历,整棵树,每一次递归的过程中逐次寻找较大的数并把此节点赋给临时指针,最后返回临时指针即为最大节点。
3、代码
/*struct TreeNode
{
int data;
TreeNode *lchild,*rchild;
}*/
class Solution {
public:
/**
* @param root the root of binary tree
* @return the max node
*/
int max=-10000;
TreeNode* t;
TreeNode* maxNode(TreeNode* root) {
// Write your code here
if(root==NULL)
return NULL;
if(root->val>max)
{
max=root->val;
t=root;
}
maxNode(root->left);
maxNode(root->right);
return t;
}
};
4、感想
第一节课就打开这个题,因为标签是入门以为会很简单,当时遍历都不知道该怎么写,试了几次就放弃了。学了各种遍历之后再回来写明显简单多了!
本来想直接用根节点的值初始化max,( max=root->val;)后来发现如果写在函数外没有定义根节点所以没法用,如果写在函数内就会每一次递归都重置了max,,还是用一个无限小的数把max初始化了。。。。
注意:比较在前,遍历在后!!