http://blog.hyoung.me/cn/2017/02/binary-tree/
树是一个非常重要的数据结构,而二叉树(Binary Tree)则是最常见的类型之一。对于二叉树的题目而言,我们通常有两种思路。第一种思路是通过遍历(Traversal),大家最熟的可能就是先序(Preorder)、中序(Inorder),以及后序(Postorder)这三种遍历算法了。除了这些之外,还有层级(Level-Order)遍历等等。第二种思路则是是分治,我们在前面二分搜索中也见过不少相关的应用,而二叉树则是一个天然适合进行分治的数据结构。
树是一个非常重要的数据结构,而二叉树(Binary Tree)则是最常见的类型之一。对于二叉树的题目而言,我们通常有两种思路。第一种思路是通过遍历(Traversal),大家最熟的可能就是先序(Preorder)、中序(Inorder),以及后序(Postorder)这三种遍历算法了。除了这些之外,还有层级(Level-Order)遍历等等。第二种思路则是是分治,我们在前面二分搜索中也见过不少相关的应用,而二叉树则是一个天然适合进行分治的数据结构。
先序、中序,和后序三种遍历算法应该算是二叉树相关最常用到的算法了,其中递归的实现最为简单,而非递归的方法则比较绕一点儿,跟许多 DFS 算法一样,通常用栈来实现。而层级遍历可能会少见一点,但是使用 BFS 的经典场景之一。
http://lintcode.com/en/problem/binary-tree-maximum-node/
Find the maximum node in a binary tree, return the node.
Example
Given a binary tree:
1
/ \
-5 2
/ \ / \
0 3 -4 -5
return the node with value
3
.public TreeNode maxNode(TreeNode root) { // Write your code here if (root == null) return root; TreeNode left = maxNode(root.left); TreeNode right = maxNode(root.right); return max(root, max(left, right)); } TreeNode max(TreeNode a, TreeNode b) { if (a == null) return b; if (b == null) return a; if (a.val > b.val) { return a; } return b; }