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