栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++二叉树理论基础

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++二叉树理论基础

目录

二叉树性质

​二叉树种类

满二叉树

完全二叉树

二叉搜索树

​ 平衡二叉搜索树

 二叉树存储方式

 二叉树的遍历方式

二叉树的定义 


二叉树性质

二叉树种类

满二叉树

如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。

完全二叉树

在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2^h -1  个节点。 

优先级队列其实是一个堆,堆就是一棵完全二叉树,同时保证父子节点的顺序关系。 

二叉搜索树

二叉搜索树是有数值的,二叉搜索树是一个有序树。 

若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树

 平衡二叉搜索树

又被称为AVL(Adelson-Velsky and Landis)树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

 C++中map、set、multimap,multiset的底层实现都是平衡二叉搜索树,所以map、set的增删操作时间时间复杂度是logn,注意我这里没有说unordered_map、unordered_set,unordered_map、unordered_map底层实现是哈希表。

 二叉树存储方式

二叉树可以链式存储(使用指针),也可以顺序存储(使用数组)。

顺序存储的元素在内存是连续分布的,而链式存储则是通过指针把分布在散落在各个地址的节点串联一起。

用数组来存储二叉树如何遍历的呢?

如果父节点的数组下标是 i,那么它的左孩子就是 i * 2 + 1,右孩子就是 i * 2 + 2。

但是用链式表示的二叉树,更有利于我们理解,所以一般我们都是用链式存储二叉树。

所以大家要了解,用数组依然可以表示二叉树。

 二叉树的遍历方式

二叉树主要有两种遍历方式:

    深度优先遍历:先往深走,遇到叶子节点再往回走。广度优先遍历:一层一层的去遍历。

深度优先遍历

前序遍历(递归法,迭代法)中序遍历(递归法,迭代法)后序遍历(递归法,迭代法)广度优先遍历

层次遍历(迭代法)

这两种遍历是图论中最基本的两种遍历方式:

深度  ----  一般用栈

广度  ----  一般用队列

前序遍历:中左右中序遍历:左中右后序遍历:左右中

二叉树的定义 
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/714575.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号