您的位置:首页 > 其它

打印二叉树中一个节点的所有祖先节点

2015-08-01 09:54 411 查看
在二叉树中找到一个节点的祖先节点是我们常用的一个算法,今天我们就来介绍两种不同的方式,一种代码简单但是效率较低,用到了递归,另一种代码复杂但是效率较高,利用非递归的后序遍历

递归方式的代码如下

public boolean ancestor(Node node,int x){
if (node==null){
return false;
}
else{
if(node.getData()==x)
return true;
else{
boolean b1=ancestor(node.left,x);
boolean b2=ancestor(node.right,x);
if(b1||b2)
System.out.print(node.getData()+" ");
return b1||b2;
}

}

}

这是非递归方式,其实只是后序遍历的一个简单应用
/**
* 给出根节点和一个节点的值,找出这个节点的所有祖先节点并且将他们打印出来(非递归方式)
*/
public void ancestor2(Node node,int x){
Node[] qu=new Node[255];
int flag=0;
int k=0;
Node pre=null;
Node p=node;
if(p!=null){
qu[k++]=p;
p=p.getLeft();
while(k>0){
while(p!=null){
qu[k++]=p;
p=p.left;
}
pre=null;
flag=1;
while(flag==1&&k>0){
p=qu[k-1];
if(p.right==pre){
k--;
if(p.data==x){
for(int i=0;i<=k;i++){
System.out.print(qu[i].getData()+" ");
}
}
pre=p;
}
else{
p=p.right;
flag=0;
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: