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