Fork me on GitHub

LintCode之二叉树的最大节点

image

分治问题,可以把整棵树看做是由一颗颗只有三个节点组成的小树,一颗树的构成是根节点、左子树、右子树,这样只需要从左子树找出一个最大的节点,从右子树找出一个最大的节点,然后与根节点三个取个最大的,就是最终的结果了。

 

AC代码:

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
    
    /*
     * @param root: the root of tree
     * @return: the max node
     */
    public TreeNode maxNode(TreeNode root) {
        // write your code here
        
        if(root==null) return null;
        
        TreeNode leftMaxNode = maxNode(root.left);
        TreeNode rightMaxNode = maxNode(root.right);
        
        TreeNode resNode = root;
        if(leftMaxNode!=null && leftMaxNode.val>resNode.val) resNode = leftMaxNode;
        if(rightMaxNode!=null && rightMaxNode.val>resNode.val) resNode = rightMaxNode;
        
        return resNode;
    }
    
}
 

 

题目来源: http://www.lintcode.com/zh-cn/problem/binary-tree-maximum-node/

posted @ 2017-11-09 22:38  CC11001100  阅读(348)  评论(0编辑  收藏  举报