/************* 寻找路径 **************/
public void printPath(Twotree head,int exceptnum){
if (head==null)
return;
ArrayDeque<Twotree> path=new ArrayDeque<>(); //保存路径用的栈
int currentnum=0;
findPath(head,currentnum,exceptnum,path);
}
public void findPath(Twotree head,int current,int exceptnum,ArrayDeque<Twotree> path){
current+=head.val;
path.push(head);
boolean isleaf=head.left==null&head.right==null;
if (current==exceptnum&&isleaf){ //假如是叶子节点且路径的和等于期望值,打印
int size=path.size(); //因为是栈的结构,为了从头节点开始打印,故不使用迭代器Iterator
Object[] array=path.toArray();
while(size>0){
Twotree note=(Twotree)array[size-1];
size--;
System.out.print(note.val+" ");
}
System.out.println();
}
if (head.left!=null){
findPath(head.left,current,exceptnum,path);
}
if (head.right!=null){
findPath(head.right,current,exceptnum,path);
}
//在返回父节点之前,在路径上删除当前节点
path.pop();
}
二叉树中和为某一值的路径
最新推荐文章于 2018-11-09 22:29:55 发布