LintCode-二叉树的最大节点

该博客介绍了如何在二叉树中找到值最大的节点。通过递归函数遍历左右子树,每次比较当前节点与左右子节点的值,更新最大值,最终返回最大值所在的节点。在实现过程中,博主遇到并解决了编程错误,明确了正确的赋值和比较逻辑。

题目描述:在二叉树中寻找值最大的节点并返回。

样例:

给出如下一棵二叉树:

     1
   /   \
 -5     2
 / \   /  \
0   3 -4  -5 

返回值为 3 的节点。

做题思路:创建两个树结点,先赋初值,把根结点赋给它们,在考虑左子树和右子树不为空的情况下,用递归函数遍历左子树和右子树,赋给创建的left和right,再比较left和root的大小以找到最大的结点,赋值给root。比较right和root的大小以找到最大的结点,赋值给root,最后返回最大的结点。

关键代码:

class Solution {
public:
    /**
     * @param root the root of binary tree
     * @return the max node
     */
    TreeNode* maxNode(TreeNode* root) {
        // Write your code here
    if(root==NULL) return NULL;
        TreeNode *left=root;  
        TreeNode *right=root;  
        if (root->left!=NULL) 
        left=maxNode(root->left);  
        if (root->right!=NULL) 
        right=maxNode(root->right);  
        if (left->val>root->val)
         root->val=left->val;
        if (right->val>root->val)
         root->val=right->val;
         return root;
     }
};


做题感想:编程错误的时候,出现了两个问题,第一个问题是在创建新的树结点时,赋什么值的时候换了好几种方式,刚开始是root的值,后来又变成了int_min,后来又换回了root,后面最后判断大小返回值的时候,不是谁大就把大的值赋给小的,而是谁大就返回谁,但就是测试数据的时候不对,后来改成这种方式就对了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值