5)二叉树[3]求所有结点到根节点的路径
2015-12-08 19:16
447 查看
#include "iostream" using namespace std; typedef char type; struct bnode{ type data; type parent; bnode *lchild,*rchild; }; class tree{ public: tree();//初始化 ~tree(); void create_tree(bnode *&T);//建立二叉树 void parent(bnode *&T,bnode *root);//求二叉树所有结点的父节点 bnode *pa(bnode *p,bnode *T);//求结点p的父节点 void path(bnode *p,bnode *root);//结点p到根节点的路径 void all_path(bnode *T,bnode *root); private: bool flags; bnode *temp; }; tree::tree()//初始化 { temp = new bnode; temp = NULL; flags = true; } void tree::create_tree(bnode *&T)//建立二叉树 { type x; cin>>x; if(x=='#')T=NULL; else { T = new bnode; T->data = x; T->parent='#'; create_tree(T->lchild);//建立左子树 create_tree(T->rchild);//建立右子树 } } bnode *tree::pa(bnode *p,bnode *T) { if(flags&&T) { if(T->lchild==p||T->rchild==p)//父节点找到,终止递归 { flags = false; temp = T; }else{ pa(p,T->lchild);//在左子树中寻找 pa(p,T->rchild);//在右子树中寻找 } } return temp; } void tree::parent(bnode *&T,bnode *root) { if(T) { if(T->parent=='#') { if(pa(T,root))//如果父节点存在 { T->parent = pa(T,root)->data; temp = NULL; } } //cout<<"Pannel point:"<<T->data<<",parent:"<<T->parent<<endl; flags = true; parent(T->lchild,root); parent(T->rchild,root); } } void tree::path(bnode *p,bnode *root) { cout<<"["<<p->data<<"->"<<root->data<<"]:"; cout<<p->data<<" "; while(p->parent!='#') { p =pa(p,root); temp = NULL; flags = true; cout<<p->data<<" "; } cout<<endl; } void tree::all_path(bnode *T,bnode* root) { if(T) { if(T!=root)path(T,root); all_path(T->lchild,root); all_path(T->rchild,root); } } tree::~tree(){} int main() { tree Tree; bnode *T; cout<<"Create Tree['#'表示空节点]:"<<endl; cout<<"Tree:"; Tree.create_tree(T); cout<<"Tree finished!"<<endl; Tree.parent(T,T); cout<<"Path:"<<endl; Tree.all_path(T,T); return 0; }
相关文章推荐
- IKEv1 主模式证书方法协商的载荷交互流程
- 20151208 再次搭建Oracle11g环境 ocp 047 20-40
- Spotlight on MySQL监控MySQL服务器
- 获取缓存路径、获得应用version号码
- 全文索引(三)lucene 分词 Analyzer
- 面试题 C++ 动态绑定 虚函数
- AVAudioSessionCategory说明
- web三种跨域请求数据方法
- 【springmvc+mybatis项目实战】杰信商贸-17.货物修改+删除
- 如何制作bootloader
- CAAnimation解读
- SQL的四种连接-左外连接、右外连接、内连接、全连接
- 【springmvc+mybatis项目实战】杰信商贸-18.附件分类基础表+数据字典
- UITableView中Cell重用机制导致内容重复覆盖
- BZOJ 2440: [中山市选2011]完全平方数( 二分答案 + 容斥原理 + 莫比乌斯函数 )
- 求编译器中数的最值(c++)
- 【springmvc+mybatis项目实战】杰信商贸-19.级联删除
- 【springmvc+mybatis项目实战】杰信商贸-20.合同货物数和附件数
- CocoaPods详解之----制作篇
- 【springmvc+mybatis项目实战】杰信商贸-22.合同货物附件生产厂家mapper关联