二叉树的初始化·数据结构

简介: 二叉树是什么?二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个节点最多只能有两棵子树,且有左右之分

二叉树是什么?

二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个节点最多只能有两棵子树,且有左右之分


思路:


首先,需要创建一个BTNode的结点,结点包含了数据,两个指针——lchild和rchild,再一个BTNode的构造函数,来初始化结点

接着,创建二叉树的类,类包含了头结点,以及各函数的实现操作。(初始化函数、创建树函数、遍历函数、求树的结点个数、求树的叶子数、求树的深度)


代码如下:

using namespace std;
typedef int Element;
//定义结点
struct BTNode {
  Element data;
  BTNode* lchild;
  BTNode* rchild;
  //结构体的构造函数
  BTNode(Element number) {
    data = number;
    lchild = NULL;
    rchild = NULL;
  }
};
//定义二叉树类
class Btree {
public:
  BTNode* Root;
  //初始化创建树头
  void Init() {
    Root = CreatBTree();
    cout << "树创建成功" << endl;
  }
  //创建树(前序)
  BTNode* CreatBTree() {
    BTNode* p;
    Element number;
    cin >> number;
    if (number == 0)
      p = NULL;
    else {
      p = new BTNode(number);
      p->lchild = CreatBTree();
      p->rchild = CreatBTree();
    }
    return p;
  }
  //前序遍历
  void preOrderTraverse(BTNode *root) {
    if (root) {
      cout << root->data << " ";
      preOrderTraverse(root->lchild);
      preOrderTraverse(root->rchild);
    }
  }
  //中序遍历
  void inOrderTraverse(BTNode* root) {
    if (root) {
      inOrderTraverse(root->lchild);
      cout << root->data << " ";
      inOrderTraverse(root->rchild);
    }
  }
  //后序遍历
  void lastOrderTraverse(BTNode* root) {
    if (root) {
      lastOrderTraverse(root->lchild);
      lastOrderTraverse(root->rchild);
      cout << root->data << " ";
    }
  }
  //求叶子结点个数
  int LeafNum(BTNode* root) {
    if (root == NULL) {
      return 0;
    }
    else if (root->lchild == NULL && root->rchild == NULL)
      return 1;
    else
      return LeafNum(root->lchild) + LeafNum(root->rchild);
  }
  //求树的结点个数
  int BTNodeNum(BTNode* root) {
    if (root == NULL)
      return 0;
    else
      return BTNodeNum(root->lchild) + BTNodeNum(root->rchild) + 1;
  }
  //求树的深度
  int TreeDepth(BTNode* root) {
    if (root == NULL)
      return 0;
    int left = TreeDepth(root->lchild);
    int right = TreeDepth(root->rchild);
    return left > right ? left + 1 : right + 1;
  }
};
int main()
{
  Btree T;
  //初始化
  T.Init();
  //遍历
  cout << "前序遍历为:" << endl;
  T.preOrderTraverse(T.Root);
  cout << endl;
  cout << "中序遍历为:" << endl;
  T.inOrderTraverse(T.Root);
  cout << endl;
  cout << "后序遍历为:" << endl;
  T.lastOrderTraverse(T.Root);
  cout << endl;
  //树的结点个数
  cout << "树的结点个数为:";
  int nodenum = T.BTNodeNum(T.Root);
  cout << nodenum << endl;
  //树的叶子个数
  cout << "树的叶子个数为:";
  int leaves = T.LeafNum(T.Root);
  cout << leaves << endl;
  //树的深度为:
  cout << "树的深度为:";
  int depth = T.TreeDepth(T.Root);
  cout << depth << endl;
  system("pause");
  cout << endl;
}


相关文章
|
23天前
|
算法
【算法与数据结构】二叉树(前中后)序遍历2
【算法与数据结构】二叉树(前中后)序遍历
|
8天前
二叉树和数据结构
二叉树和数据结构
16 0
|
9天前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
|
19天前
|
算法 索引
【算法与数据结构】深入二叉树实现超详解(全源码优化)
【算法与数据结构】深入二叉树实现超详解(全源码优化)
|
19天前
|
存储 算法
【算法与数据结构】深入解析二叉树(二)之堆结构实现
【算法与数据结构】深入解析二叉树(二)之堆结构实现
|
30天前
|
存储 算法 程序员
【数据结构】【版本2.0】【树形深渊】——二叉树入侵
【数据结构】【版本2.0】【树形深渊】——二叉树入侵
|
1月前
|
算法 C++ 开发者
【C/C++ 数据结构 】二叉树基本性质:具有n个结点的完全二叉树的深度为[log2n]+1或者[log2(n+1)]...
【C/C++ 数据结构 】二叉树基本性质:具有n个结点的完全二叉树的深度为[log2n]+1或者[log2(n+1)]...
12 0
|
1月前
|
存储 算法 C语言
【C/C++ 数据结构 树】探索C/C++中的二叉树:从理论到实践
【C/C++ 数据结构 树】探索C/C++中的二叉树:从理论到实践
60 0
|
1月前
|
存储 算法 Python
数据结构与算法——二叉树介绍(附代码)
数据结构与算法——二叉树介绍(附代码)
22 3
|
存储 算法
【链式二叉树】数据结构链式二叉树的(万字详解)
【链式二叉树】数据结构链式二叉树的(万字详解)