1. 程式人生 > >LintCode之二叉樹的最大節點

LintCode之二叉樹的最大節點

-c eno mar width ac代碼 zh-cn class efi es2017

技術分享

分治問題,可以把整棵樹看做是由一顆顆只有三個節點組成的小樹,一顆樹的構成是根節點、左子樹、右子樹,這樣只需要從左子樹找出一個最大的節點,從右子樹找出一個最大的節點,然後與根節點三個取個最大的,就是最終的結果了。

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/

LintCode之二叉樹的最大節點