二叉树数据结构


三 树形结构
    1 树
        节点、根节点、父节点、子节点、兄弟节点(相同父亲才叫兄弟节点)
        一棵树可以没有任何节点,称为空树
        一棵树可以只有一个节点,也就是只有根节点
        子树、左子树、右子树 :这个就是有直接关系的树,孙子不算
        节点的度:子树的个数
        树的度:所有节点度中的最大值
        叶子节点:度为0的节点
        非叶子节点:度不为零的节点
        层数:根节点在第一层,根节点的子节点在第二层,
        节点的深度:从根节点到当前节点的唯一路径上的节点数
        节点的高度:从当前节点到最远叶子节点的路径上的节点总数
        树的深度:所有节点深度中的最大值
        树的高度:所有节点高度中的最大值  
        树的深度= 树的高度
        
        有序树:树中任意节点的子节点之间有顺序关系                         有序树和无序树只针对子节点
        无序树:树的任意节点之间的子节点之间没有顺序  也称自由树
    2 二叉树 binary tree
        定义:每个节点的度最大为2 并且左子树和右子树是有顺序的
        特点 :
            1每个节点的度最大是2 
            2 左子树以及右子树都是有顺序的
            3 即使节点只有一颗子树,也要区分左右子树
            4 非空二叉树的第i层,最多有2的i次方-1个节点
            5 在高度为h的二叉树上最多有2的h次方-1个节点
            6 对于任意一个二叉树,如果叶子节点个数为n0,度为2的节点个数为n2,那么就有n0=n2+1
        真二叉树:所有节点的度要么是零要么是二
        满二叉树:所有节点的度要么是0,要么是2,并且所有的叶子节点都在最后一层
            特点:
                1在同样高度的二叉树中,满二叉树的叶子节点数量最多,总节点数量最多
                2 满二叉树一定是真二叉树,真二叉树不一定是满二叉树。
                3 满二叉树的高度是h 那么第i层的节点数量是2的i次方减一
        完全二叉树:叶子节点只会出现在最后两层,并且最后一层的叶子节

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
二叉树是一种常用的数据结构,它由一个根节点和最多两个子构成,其中左子和右子也是二叉树。下面是一个基于C++的二叉树数据结构实现。 ```c++ #include <iostream> using namespace std; // 二叉树节点结构体 struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} }; // 二叉树类 class BinaryTree { private: TreeNode* root; // 根节点 public: BinaryTree() : root(nullptr) {} // 构造函数 // 插入节点 void insert(int val) { if (root == nullptr) { // 如果根节点为空,插入根节点 root = new TreeNode(val); return; } TreeNode* cur = root; while (true) { // 找到插入位置 if (val < cur->val) { // 如果小于当前节点,往左子找 if (cur->left == nullptr) { // 如果左子为空,插入左子 cur->left = new TreeNode(val); return; } cur = cur->left; } else { // 如果大于等于当前节点,往右子找 if (cur->right == nullptr) { // 如果右子为空,插入右子 cur->right = new TreeNode(val); return; } cur = cur->right; } } } // 中序遍历 void inorder(TreeNode* cur) { if (cur != nullptr) { inorder(cur->left); cout << cur->val << " "; inorder(cur->right); } } void inorderTraversal() { cout << "中序遍历结果:"; inorder(root); cout << endl; } }; int main() { BinaryTree bt; bt.insert(5); bt.insert(7); bt.insert(2); bt.insert(8); bt.insert(1); bt.inorderTraversal(); // 中序遍历结果:1 2 5 7 8 return 0; } ``` 在这个实现中,我们定义了一个二叉树节点结构体,其中包括节点的值,左子指针和右子指针。我们还定义了一个二叉树类,其中包括根节点指针和插入节点、中序遍历等方法。在插入节点时,我们从根节点开始遍历找到插入位置。在中序遍历时,我们先递归遍历左子,输出当前节点的值,再递归遍历右子

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值