首页 > 其他 > 详细

5)求所有结点到根节点的路径

时间:2015-12-08 20:12:40      阅读:563      评论:0      收藏:0      [点我收藏+]
  1 #include "iostream"
  2 using namespace std;
  3 
  4 typedef char type;
  5 struct bnode{
  6     type data;
  7     type parent;
  8     bnode *lchild,*rchild;
  9 };
 10 
 11 class tree{
 12 public:
 13     tree();//初始化
 14     ~tree();
 15     void create_tree(bnode *&T);//建立二叉树
 16     void parent(bnode *&T,bnode *root);//求二叉树所有结点的父节点
 17     bnode *pa(bnode *p,bnode *T);//求结点p的父节点
 18     void path(bnode *p,bnode *root);//结点p到根节点的路径
 19     void all_path(bnode *T,bnode *root);
 20 private:
 21     bool flags;
 22     bnode *temp;
 23 };
 24 
 25 tree::tree()//初始化
 26 {
 27     temp = new bnode;
 28     temp = NULL;
 29     flags = true;
 30 }
 31 
 32 void tree::create_tree(bnode *&T)//建立二叉树
 33 {
 34     type x;
 35     cin>>x;
 36     if(x==#)T=NULL;
 37     else {
 38         T = new bnode;
 39         T->data = x;
 40         T->parent=#;
 41         create_tree(T->lchild);//建立左子树
 42         create_tree(T->rchild);//建立右子树
 43     }
 44 }
 45 
 46 bnode *tree::pa(bnode *p,bnode *T)
 47 {
 48     if(flags&&T)
 49     {
 50         if(T->lchild==p||T->rchild==p)//父节点找到,终止递归
 51         {
 52             flags = false;
 53             temp = T;
 54         }else{
 55             pa(p,T->lchild);//在左子树中寻找
 56             pa(p,T->rchild);//在右子树中寻找
 57             
 58         }
 59     }
 60     return temp;
 61 }
 62 
 63 void tree::parent(bnode *&T,bnode *root)
 64 {
 65     if(T)
 66     {
 67         if(T->parent==#)
 68         {
 69             if(pa(T,root))//如果父节点存在
 70             {
 71                 T->parent = pa(T,root)->data;
 72                 temp = NULL;
 73             }
 74         }
 75         //cout<<"Pannel point:"<<T->data<<",parent:"<<T->parent<<endl;
 76         flags = true;
 77         parent(T->lchild,root);
 78         parent(T->rchild,root);
 79 
 80     }
 81     
 82 }
 83 
 84 void tree::path(bnode *p,bnode *root)
 85 {
 86     cout<<"["<<p->data<<"->"<<root->data<<"]:";
 87     cout<<p->data<<" ";
 88     while(p->parent!=#)
 89     {
 90         p =pa(p,root);
 91         temp = NULL;
 92         flags = true;
 93         cout<<p->data<<" ";
 94     }
 95     cout<<endl;
 96 }
 97 
 98 void tree::all_path(bnode *T,bnode* root)
 99 {
100     if(T)
101     {
102         if(T!=root)path(T,root);
103         all_path(T->lchild,root);
104         all_path(T->rchild,root);
105     }
106 }
107 tree::~tree(){}
108 
109 int main()
110 {
111     tree Tree;
112     bnode *T;
113     cout<<"Create Tree[‘#‘表示空节点]:"<<endl;
114     cout<<"Tree:";
115     Tree.create_tree(T);
116     cout<<"Tree finished!"<<endl;
117     Tree.parent(T,T);
118     cout<<"Path:"<<endl;
119     Tree.all_path(T,T); 
120     return 0;
121 }

技术分享技术分享

5)求所有结点到根节点的路径

原文:http://www.cnblogs.com/minmsy/p/5030687.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!