二叉数查找指定结点
2016-05-07 17:17
369 查看
指定的节点用节点存储的数据来代表,采用递归的方法先判断当前节点是否是目标节点,若不是则依次查找左子树和右子树:
#include<iostream> #include<stack> using namespace std; typedef struct tr { int data; struct tr *left,*right; }tre,* tree; stack<tree>st; tree creat(tree root,int val) { tree newroot; if(NULL==root) { newroot=new tre; newroot->data=val; newroot->left=newroot->right=NULL; return newroot; } if(val<=root->data) root->left=creat(root->left,val); else root->right=creat(root->right,val); return root; } void level(tree root,int val,int &ans,int lev) {//lev为中间变量,初始值为1,记录层数 if(NULL==root) ans=-1; else if(root->data==val) ans=lev; else { level(root->left,val,ans,lev+1);//在左子树中查找 if(ans==-1) level(root->right,val,ans,lev+1);//在右子树中查找 } } /*void lbr(tree root) { while(NULL!=root || !st.empty()) { if(NULL!=root) { st.push(root); root=root->left; } else { root=st.top(); st.pop(); printf("%d ",root->data); root=root->right; } } } void blr(tree root) { while(NULL!=root || !st.empty()) { if(NULL!=root) { printf("%d ",root->data); st.push(root); root=root->left; } else { root=st.top(); st.pop(); root=root->right; } } }*/ int main() { int n; int res; tree tmp; tmp=NULL; while(scanf("%d",&n),n+1) tmp=creat(tmp,n); lbr(tmp); printf("/n"); blr(tmp); printf("/n"); while(scanf("%d",&n)!=EOF) { res=-1; level(tmp,n,res,1); printf("%d/n",res); } return false; }
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- 有关数据库SQL递归查询在不同数据库中的实现方法
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- 使用SqlServer CTE递归查询处理树、图和层次结构
- C#中的尾递归与Continuation详解
- C语言二叉树的非递归遍历实例分析
- 使用C语言构建基本的二叉树数据结构
- 一波二叉树遍历问题的C++解答实例分享
- C#递归实现显示文件夹及所有文件并计算其大小的方法
- 举例讲解C语言程序中对二叉树数据结构的各种遍历方式
- C++非递归队列实现二叉树的广度优先遍历
- php递归创建目录的方法
- PHP实现的线索二叉树及二叉树遍历方法详解
- C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法
- PHP递归创建多级目录
- Javascript递归打印Document层次关系实例分析
- oracle 使用递归的性能提示测试对比
- 使用curl递归下载软件脚本分享
- Perl脚本实现递归遍历目录下的文件