码迷,mamicode.com
首页 > 其他好文 > 详细

C++二叉树基本操作

时间:2014-11-26 14:11:48      阅读:304      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   os   sp   div   2014   log   

 

 

  1 //First Edit Time:    2014-11-26 12:04
  2 //Last Edit Time:    2014-11-26 12:52
  3 #include<iostream>
  4 #include<cstring>
  5 #include<cstdio>
  6 using namespace std;
  7 
  8 struct BTreeNode
  9 {
 10     int data;
 11     BTreeNode *lChild,*rChild;
 12 };
 13 
 14 class BTree
 15 {
 16     public:
 17         void Set_Root(BTreeNode* r){ root=r;}
 18         BTreeNode* Get_Root() { return root;}
 19         BTreeNode* CreatBTree();
 20         
 21         void InOrder(BTreeNode* r);//中序遍历(递归)
 22         void PreOrder(BTreeNode *r);
 23         void PostOrder(BTreeNode *r);
 24 
 25         int Count_BTree(BTreeNode*); // 结点个数
 26         int Leaves_BTree(BTreeNode*); //叶子结点
 27         int Height_BTree(BTreeNode*); // 树高
 28         BTreeNode* root;
 29 };
 30 
 31 //建立二叉树的算法
 32 BTreeNode* BTree::CreatBTree()
 33 {
 34     BTreeNode* current=0;
 35     int val=0;
 36 
 37     cin>>val;
 38     if(val==-1)
 39         return NULL;
 40     else
 41     {
 42         current=new BTreeNode;
 43         current->data=val;
 44         current->lChild = CreatBTree();
 45         current->rChild = CreatBTree();
 46         return current;
 47     }
 48 }
 49 
 50 
 51 //中序访问二叉树(递归)
 52 void BTree::InOrder(BTreeNode* r)
 53 {
 54     if(r)
 55     {
 56         InOrder(r->lChild);
 57         cout<<r->data<<" ";
 58         InOrder(r->rChild);
 59     }
 60 }
 61 
 62 //前序递归访问二叉树(递归)
 63 void BTree::PreOrder(BTreeNode* r)
 64 {
 65     if(r)
 66     {
 67         cout<<r->data<<" ";
 68         PreOrder(r->lChild);
 69         PreOrder(r->rChild);
 70     }
 71 }
 72 
 73 
 74 //后序遍历(递归)
 75 void BTree::PostOrder(BTreeNode* r)
 76 {
 77     if(r)
 78     {
 79         PostOrder(r->lChild);
 80         PostOrder(r->rChild);
 81         cout<<r->data<<" ";
 82     }
 83 }
 84 
 85 //求二叉树结点个数的函数
 86 int BTree::Count_BTree(BTreeNode* r)
 87 {
 88     if(r==0)
 89         return 0; 
 90     else
 91         return 1 + Count_BTree (r->lChild) + Count_BTree(r->rChild);
 92 }
 93 
 94 //求二叉树叶子结点个数的函数
 95 int BTree::Leaves_BTree(BTreeNode* r)
 96 {
 97     if(r==0) 
 98         return 0; 
 99     else if(r->lChild == 0 && r->rChild == 0)
100             return 1;
101     else
102         return Leaves_BTree(r->lChild) + Leaves_BTree(r->rChild);
103 }
104 
105 //求二叉树高度的函数
106 int BTree::Height_BTree(BTreeNode* r)
107 {
108     if(r==0)
109         return 0;
110     else
111     {
112         int left = Height_BTree(r->lChild);
113         int right = Height_BTree(r->rChild);
114         return (left > right) ? left + 1 : right+1;
115     }
116 }
117 
118 int main()
119 {
120     BTree tree;
121     int op;
122     tree.CreatBTree();
123     while(1)
124     {
125         puts("操作如下:\n*******************");
126         printf("1.前序遍历\n2.中序遍历\n3.后序遍历\n4.节点个数\n5.叶子结点个数\n6.二叉树高度\n7.获取跟结点\n\n");
127         cin >> op;
128         if(op == 1)
129             tree.InOrder(tree.root);
130         else if(op == 2)
131             tree.PreOrder(tree.root);
132         else if(op == 3)
133             tree.PostOrder(tree.root);
134         else if (op == 4)
135             tree.Count_BTree(tree.root);
136         else if(op==5)
137             tree.Leaves_BTree (tree.root);
138         else if(op == 6)
139             tree.Height_BTree (tree.root);
140         else if (op == 7)
141         {
142             BTreeNode* tmp = tree.Get_Root();
143             cout << tmp->data << endl;
144         }
145         else break;
146     }
147     return 0;
148 }

 

C++二叉树基本操作

标签:style   blog   io   color   os   sp   div   2014   log   

原文地址:http://www.cnblogs.com/khan724/p/4122984.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!