深圳幻海软件技术有限公司 欢迎您!

使用C++创建二叉树和其基本操作

2023-04-22

目录1.创建二叉树节点2.使用前序遍历创建二叉树3.遍历二叉树 3.1前序遍历二叉树3.2中序遍历二叉树3.3后序遍历二叉树4.二叉树是否为空5.求二叉树的节点数6.求二叉树的深度完整代码运行测试用例及截图1.创建二叉树节点typedefstructTreeNode{chardata;//

目录

1.创建二叉树节点

2.使用前序遍历创建二叉树

3.遍历二叉树 

3.1 前序遍历二叉树

3.2 中序遍历二叉树

3.3 后序遍历二叉树

4. 二叉树是否为空

5. 求二叉树的节点数

6.求二叉树的深度

完整代码

运行测试用例及截图


1.创建二叉树节点

  1. typedef struct TreeNode {
  2. char data;//数据域
  3. TreeNode* Lchild;//左孩子
  4. TreeNode* Rchild;//右孩子
  5. }*Tree, TreeNode;

2.使用前序遍历创建二叉树

  1. void CreateTree(Tree& T) {
  2. char x;
  3. cin >> x;
  4. if (x =='*') {
  5. T = NULL; return;
  6. }
  7. else {
  8. T = new TreeNode;
  9. T->data = x;
  10. CreateTree(T->Lchild);
  11. CreateTree(T->Rchild);
  12. }
  13. }

3.遍历二叉树 

3.1 前序遍历二叉树

  1. void Pre_Traversal(const Tree& T) {
  2. if (T) {
  3. cout << T->data<<" ";
  4. Pre_Traversal(T->Lchild);
  5. Pre_Traversal(T->Rchild);
  6. }
  7. }

3.2 中序遍历二叉树

  1. void Ino_Traversal(const Tree& T) {
  2. if (T) {
  3. Ino_Traversal(T->Lchild);
  4. cout << T->data<<" ";
  5. Ino_Traversal(T->Rchild);
  6. }
  7. }

3.3 后序遍历二叉树

  1. void Pos_Traversal(const Tree& T) {
  2. if (T) {
  3. Pos_Traversal(T->Lchild);
  4. Pos_Traversal(T->Rchild);
  5. cout << T->data << " ";
  6. }
  7. }

4. 二叉树是否为空

  1. bool TreeEmpty(const Tree& T) {
  2. if (T == NULL)
  3. {
  4. cout << "该二叉树为空!"<<endl;
  5. return true;
  6. }
  7. else
  8. {
  9. cout << "该二叉树为不为空!"<<endl;
  10. return false;
  11. }
  12. }

5. 求二叉树的节点数

  1. int TreeNodeCount(const Tree& T) {
  2. if (T == NULL)
  3. return 0;
  4. else if (T->Lchild == NULL && T->Rchild == NULL)
  5. return 1;
  6. else
  7. return TreeNodeCount(T->Lchild) + TreeNodeCount(T->Rchild)+1;
  8. }

6.求二叉树的深度

  1. int TreeDepth(const Tree& T) {
  2. if (T == NULL) return 0;
  3. else {
  4. int i = TreeDepth(T->Lchild);
  5. int j = TreeDepth(T->Rchild);
  6. return i > j ? i + 1 : j + 1;
  7. }
  8. }

完整代码

  1. #include<iostream>
  2. using namespace std;
  3. typedef struct TreeNode {
  4. char data;//数据域
  5. TreeNode* Lchild;//左孩子
  6. TreeNode* Rchild;//右孩子
  7. }*Tree, TreeNode;
  8. //前序创建二叉树
  9. void CreateTree(Tree& T) {
  10. char x;
  11. cin >> x;
  12. if (x =='*') {
  13. T = NULL; return;
  14. }
  15. else {
  16. T = new TreeNode;
  17. T->data = x;
  18. CreateTree(T->Lchild);
  19. CreateTree(T->Rchild);
  20. }
  21. }
  22. //先序遍历
  23. void Pre_Traversal(const Tree& T) {
  24. if (T) {
  25. cout << T->data<<" ";
  26. Pre_Traversal(T->Lchild);
  27. Pre_Traversal(T->Rchild);
  28. }
  29. }
  30. //中序遍历
  31. void Ino_Traversal(const Tree& T) {
  32. if (T) {
  33. Ino_Traversal(T->Lchild);
  34. cout << T->data<<" ";
  35. Ino_Traversal(T->Rchild);
  36. }
  37. }
  38. //后序遍历
  39. void Pos_Traversal(const Tree& T) {
  40. if (T) {
  41. Pos_Traversal(T->Lchild);
  42. Pos_Traversal(T->Rchild);
  43. cout << T->data << " ";
  44. }
  45. }
  46. //二叉树是否为空
  47. bool TreeEmpty(const Tree& T) {
  48. if (T == NULL)
  49. {
  50. cout << "该二叉树为空!"<<endl;
  51. return true;
  52. }
  53. else
  54. {
  55. cout << "该二叉树为不为空!"<<endl;
  56. return false;
  57. }
  58. }
  59. //求二叉树的节点数
  60. int TreeNodeCount(const Tree& T) {
  61. if (T == NULL)
  62. return 0;
  63. else if (T->Lchild == NULL && T->Rchild == NULL)
  64. return 1;
  65. else
  66. return TreeNodeCount(T->Lchild) + TreeNodeCount(T->Rchild)+1;
  67. }
  68. //求二叉树的深度
  69. int TreeDepth(const Tree& T) {
  70. if (T == NULL) return 0;
  71. else {
  72. int i = TreeDepth(T->Lchild);
  73. int j = TreeDepth(T->Rchild);
  74. return i > j ? i + 1 : j + 1;
  75. }
  76. }
  77. int main(){
  78. Tree T;
  79. cout << "请按先序遍历的顺序创建二叉树,若其节点的左孩子或右孩子不存在则使用*代替!如:(ABD**E**CF**G**)" << endl;
  80. CreateTree(T);
  81. TreeEmpty(T);
  82. cout << "先序遍历的结果为:";
  83. Pre_Traversal(T) ;
  84. cout<< endl;
  85. cout << "中序遍历的结果为:";
  86. Ino_Traversal(T);
  87. cout << endl;
  88. cout << "后序遍历的结果为:";
  89. Pos_Traversal(T);
  90. cout << endl;
  91. cout << "该树的深度为:"<< TreeDepth(T)<< endl;
  92. cout << "该树的节点数为:" << TreeNodeCount(T) << endl;
  93. system("pause");
  94. }

运行测试用例及截图

下图为测试用例: (ABD**E**CF**G**)

                        ​​​​​​​

前序遍历:A B D E C F G

中序遍历:D B E A F C G

后序遍历:D E B F G C A

总节点数 :7

树的深度:3 

运行截图如下:

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览44726 人正在系统学习中