问题描述:
打印所有到叶子节点长度为2的路径
10
/ \
6 16
/ \ / \
4 8 14 18
/ \ / \ \
2 5 12 15 20
/
11
打印:
[10 6 8]
[6 4 2]
[6 4 5]
[16 14 15]
[16 18 20]
[14 12 11]
问题分析:
中序遍历树,每一个节点检查有无高度为2的路径
代码实现:
//IT27 start
private LinkedList<BSTreeNode> lst = new LinkedList<BSTreeNode>();
public void findDepthPath(int depth){
findDepthPath(root, depth);
}
private void findDepthPath(BSTreeNode bsTreeNode, int expected){
//inorder traversal tree
//checkNode for each node
checkNode(bsTreeNode, expected);
if(bsTreeNode.left != null)
findDepthPath(bsTreeNode.left, expected);
if(bsTreeNode.right != null)
findDepthPath(bsTreeNode.right, expected);
}
//Find all the expected depth leaf and print path
private void checkNode(BSTreeNode bsTreeNode, int expected){
lst.addLast(bsTreeNode);
if(isLeaf(bsTreeNode) && expected == 0) {
System.out.println("Get: ");
for (int i = 0; i < lst.size(); i++) {
System.out.print(lst.get(i).value + " ");
}
System.out.println();
}
if(bsTreeNode.left != null && expected > 0) {
checkNode(bsTreeNode.left, --expected);
++expected;
}
if(bsTreeNode.right != null && expected > 0) {
checkNode(bsTreeNode.right, --expected);
++expected;
}
lst.removeLast();
}
//IT27 end
代码输出:
Get:
10 6 8
Get:
6 4 2
Get:
6 4 5
Get:
16 14 15
Get:
16 18 20
Get:
14 12 11