找树上最长链
import java.util.ArrayList;
import java.util.List;
import dataStructure.TreeNode;
public class LongestTreePath {
private List<TreeNode> findLongestPath(TreeNode n) {
List<TreeNode> stacks = new ArrayList<TreeNode>();
TreeNode left = n.left;
TreeNode right = n.right;
stacks.add(n);
if (left == null && right == null) {
return stacks;
} else {
List<TreeNode> sl = new ArrayList<TreeNode>();
List<TreeNode> sr = new ArrayList<TreeNode>();
if (left != null) {
//Find longest path to left of TreeNode.
sl = findLongestPath(left);
}
if (right != null) {
//Find longest path to right of TreeNode.
sr = findLongestPath(right);
}
if (sl.size() >= sr.size()) {
for (TreeNode e : sl) {
stacks.add(e);
}
} else {
for (TreeNode e : sr) {
stacks.add(e);
}
}
return stacks;
}
}
public static void main(String[] args) {
LongestTreePath path = new LongestTreePath();
path.find();
}
public void find() {
TreeNode t1 = new TreeNode(1);
TreeNode t2 = new TreeNode(2);
TreeNode t3 = new TreeNode(3);
TreeNode t4 = new TreeNode(4);
TreeNode t5 = new TreeNode(5);
TreeNode t6 = new TreeNode(6);
TreeNode t7 = new TreeNode(7);
TreeNode t8 = new TreeNode(8);
TreeNode t9 = new TreeNode(9);
TreeNode t10 = new TreeNode(10);
TreeNode t11 = new TreeNode(11);
TreeNode t12 = new TreeNode(12);
TreeNode t13 = new TreeNode(13);
TreeNode t14 = new TreeNode(14);
t1.left = t2;
t1.right = t3;
t2.left = t4;
t2.right = t5;
t3.right = t6;
t4.right = t7;
t4.left = t8;
t6.left = t9;
t9.left = t10;
t10.left = t11;
t11.right = t12;
t12.left = t13;
t12.right = t14;
for (TreeNode el : findLongestPath(t1)) {
System.out.println(el.val);
}
}
}