从上往下打印出二叉树的每个节点,同层节点从左至右打印。
例如,以下二叉树层次遍历的结果为:1,2,3,4,5,6,7

深度截图_选择区域_20190510150420.png
使用队列来进行层次遍历。
不需要使用两个队列分别存储当前层的节点和下一层的节点,因为在开始遍历一层的节点时,当前队列中的节点数就是当前层的节点数,只要控制遍历这么多节点数,就能保证这次遍历的都是当前层的节点。
{递归
判断 节点==val
是的话找到了
不是的话找左右子节点 key=key-node.val
}
package offer2;
import java.util.Stack;
public class TreePath {
public static void main(String[] args) {
BinaryTreeNode root1 = new BinaryTreeNode(1);
BinaryTreeNode node1 = new BinaryTreeNode(4);
BinaryTreeNode node2 = new BinaryTreeNode(5);
BinaryTreeNode node3 = new BinaryTreeNode(3);
BinaryTreeNode node4 = new BinaryTreeNode(6);
BinaryTreeNode node5 = new BinaryTreeNode(3);
BinaryTreeNode node6 = new BinaryTreeNode(2);
root1.left = node1;
root1.right = node2;
node1.left = node3;
node1.right = node4;
node2.left = node5;
node2.right = node6;
TreePath treePath=new TreePath();
treePath.findpath(root1,8);
}
public void findpath(BinaryTreeNode root,int key){
if (root==null){
return;
}
Stack<Integer> stack=new Stack<>();
findpath(root,key,stack);
}
public void findpath(BinaryTreeNode root,int key,Stack <Integer> path){
if (root==null)
return;
if(root.left == null && root.right == null){
if(root.val == key){
System.out.println("路径开始");
for(int i :path)
System.out.print(i+",");
System.out.print(root.val);
}
}
else{
path.push(root.val);
findpath(root.left,key-root.val,path);
findpath(root.right,key-root.val,path);
path.pop();
}
}
}
class BinaryTreeNode {
int val = 0;
BinaryTreeNode left = null;
BinaryTreeNode right = null;
public BinaryTreeNode(int val) {
this.val = val;
}
}