二叉树的基本操作

时间:2021-11-04 17:31:18

二叉树的基本操作: 包括创建二叉树,遍历二叉树(先序、中序和后序),求二叉树深度,求二叉树结点数,求叶子结点数。

其中创建二叉树是先序创建的,即输入的时候要按二叉树先序输入。

废话不说直接看代码

  1 #include <iostream>
  2 using namespace std;
  3 
  4 struct BiTNode
  5 {
  6     int data;
  7     BiTNode *lchild, *rchild;
  8 };
  9 
 10 //先序建立二叉树
 11 void CreateBitTree(BiTNode *&root)
 12 {
 13     int value;
 14     cin >> value;
 15     if (value == -1)
 16         root = NULL;
 17     else
 18     {
 19         root = new BiTNode;
 20         root->data = value;
 21         CreateBitTree(root->lchild);
 22         CreateBitTree(root->rchild);
 23     }
 24 }
 25 
 26 //先序遍历
 27 void PreorderTraversal(BiTNode *root)
 28 {
 29     if (root)
 30     {
 31         cout << root->data << ' ';
 32         PreorderTraversal(root->lchild);
 33         PreorderTraversal(root->rchild);
 34     }
 35 }
 36 
 37 //中序遍历
 38 void InorderTraversal(BiTNode *root)
 39 {
 40     if (root)
 41     {
 42         InorderTraversal(root->lchild);
 43         cout << root->data << ' ';
 44         InorderTraversal(root->rchild);
 45     }
 46 }
 47 
 48 //后序遍历
 49 void PostorderTraversal(BiTNode *root)
 50 {
 51     if (root)
 52     {
 53         PostorderTraversal(root->lchild);
 54         PostorderTraversal(root->rchild);
 55         cout << root->data << ' ';
 56     }
 57 }
 58 
 59 int GetDepth(BiTNode *root)
 60 {
 61     if (root == NULL)
 62         return 0;
 63     else
 64     {
 65         int ldep = GetDepth(root->lchild);
 66         int rdep = GetDepth(root->rchild);
 67         return ldep >= rdep ? ldep + 1 : rdep + 1;
 68     }
 69 }
 70 
 71 int GetNodeCount(BiTNode *root)
 72 {
 73     if (root == NULL)
 74         return 0;
 75     return GetNodeCount(root->lchild) + GetNodeCount(root->rchild) + 1;
 76 }
 77 
 78 int GetLeafCount(BiTNode *root)
 79 {
 80     if (root == NULL)
 81         return 0;
 82     else if (root->lchild == NULL && root->rchild == NULL)
 83         return 1;
 84     else
 85         return GetLeafCount(root->lchild) + GetLeafCount(root->rchild);
 86 }
 87 
 88 int main()
 89 {
 90     BiTNode *root = NULL;
 91     CreateBitTree(root);
 92     cout << "先序遍历:" << endl;
 93     PreorderTraversal(root);
 94     cout << "中序遍历:" << endl;
 95     InorderTraversal(root);
 96     cout << "后序遍历:" << endl;
 97     PostorderTraversal(root);
 98     cout << "二叉树深度:" << GetDepth(root) << endl;
 99     cout << "结点个数:" << GetNodeCount(root) << endl;
100     cout << "叶子个数:" << GetLeafCount(root) << endl;
101     system("pause");
102 }

 

输出结果:

创建的是如下的一颗二叉树:

                1
        2               3
    4      -1     -1       -1
-1     -1

二叉树的基本操作