「这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战」
链式二叉树
我们需要明白一点,就是普通的二叉树增删查改没有什么价值,因为普通二叉树用来存数据复杂且不方便
那么链式二叉树有什么好的地方呢
价值体现:在他的基础之上,增加一些性质,才有意义
1.搜索二叉树 :最多查找高度次—>时间复杂度O(N)—>单链树也就引出平衡二叉树—>AVL树和红黑树
2.Huffman 树(以后再说,反正不是现在了解的)
我们不关注普通二叉树的增删查改,我们关注递归遍历结构
1.为后面学习更有用树打基础
2.很多oj题结构普遍二叉树
二叉树被分成 根 左子树 右子树
二叉树的遍历
前序、中序以及后序遍历
学习二叉树结构,最简单的方式就是遍历。所谓二叉树遍历(Traversal)是按照某种特定的规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次。访问结点所做的操作依赖于具体的应用问题。遍历是二叉树上最重要的运算之一,也是二叉树上进行其它运算的基础。
image-20211112211723351
按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历:(上图为例图)(前中后访问根的时机不一样)
image-20211112213707848
1.前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。根 左子树 右子树
上图前序遍历的顺序是:A B D NULL NULL NULL C E NULL NULL F NULL NULL只有把空放进去才能真正的知道思想,那些不加 空的就是耍流氓,没错说的就是你们老师,对你们耍流氓
2.中序遍历(Inorder Traversal)——访问根结点的操作发生在遍历其左右子树之中(间)。左子树 根 右子树
上图中序遍历的顺序是:NULL D NULL B NULL A (这时候想访问C就得访问E)NULL E NULL C NULL F NULL
3.后序遍历(Postorder Traversal)——访问根结点的操作发生在遍历其左右子树之后。左子树 右子树 根
上图后序遍历的顺序是:NULL NULL D NULL B NULL NULL E NULL NULL F C A
分治
这里我们用的思想是分治的思想,分而治之—–大事化小,小事化了
二叉树
二叉树节点
1 | c复制代码//二叉树数据类型 |
我们把上面的树建好
1 | c复制代码//创建树 我们不学二叉树的增删查改原因就在这,我们想要啥树自己链一个就行,没必要增删查改 |
二叉树前序遍历
image-20211113085631295
这张图我实际上是想通过左右与上下滚动联合操作来截图的,然后我就找几个小时,基本能找的都找了,全网没有左右滚动截图的软件基本全是截图后窗口亮,不可以操作外面的滚动条,就算能操作也不可以左右滚动截图
1 | c复制代码//二叉树前序遍历 |
二叉树中序遍历
image-20211113152651694
我故意写成一个窗口的宽度,不然会很麻烦
image-20211113171127588
1 | c复制代码//二叉树中序遍历 |
二叉树后序遍历
image-20211113183048915
1 | c复制代码//二叉树后序遍历 |
二叉树节点个数
次数用传址的方式
image-20211113191511501
1 | c复制代码//二叉树节点个数 |
次数用返回值的方式(假如我是代码我必然要嫁给这条代码)
image-20211113193430719
1 | c复制代码//二叉树节点个数 |
二叉树叶子节点个数
image-20211113232154579
1 | C复制代码//二叉树叶子节点个数 |
二叉树第k层节点个数
image-20211114000025087
1 | c复制代码//二叉树第k层节点个数 |
二叉树深度/高度
image-20211114005007897
1 | c复制代码//二叉树深度/高度 |
二叉树查找值为x的节点
image-20211114013914115
1 | c复制代码//二叉树查找值为x的节点 |
二叉树层序遍历
image-20211117085251571
1 | c复制代码//二叉树层序遍历 不需要用递归,用队列就可以解决 |
判断二叉树是否是完全二叉树BinaryTreeComplete
image-20211118000032718
1 | c复制代码// 判断二叉树是否是完全二叉树 |
二叉树销毁BinaryTreeDestory
image-20211120002929144
1 | c复制代码//二叉树销毁 |
代码
BinaryTree.h
1 | c复制代码#pragma once |
BinaryTree.c
1 | c复制代码#define _CRT_SECURE_NO_WARNINGS 1 |
test.c
1 | c复制代码#define _CRT_SECURE_NO_WARNINGS 1 |
本文转载自: 掘金