打印二叉树中一个节点的所有祖先节点
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 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; } } } } }
相关文章推荐
- 黑马程序员——自学总结(九)正则表达式
- UML 类图基本图示法
- 读取properties文件
- 无法原谅自己的退步
- 二分 例题2
- 读取properties文件
- Android studio 重置 DDMS面板布局
- 二分 例题1
- 设计模式-前言
- HDU 4985 Little Pony and Permutation(简单模拟)
- Handler的用法大汇总
- 软件工程(8-10章)
- poj 3264 Balanced Lineup
- Can you find it?
- Ueditor上传图片到本地改造到上传图片到云存储
- C语言——原码、反码、补码、数据类型取值范围
- Shiro学习(18)并发人数限制
- Ajax 局部刷新
- POJ 3258 River Hopscotch
- SpringMVC处理json数据