这篇文章主要为大家介绍了C语言植物大战数据结构二叉树递归,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
" 梧桐更兼细雨,到黄昏、点点滴滴。"
C语言朱武大战数据结构专栏
C语言植物大战数据结构快速排序图文示例
C语言植物大战数据结构希尔排序算法
C语言植物大战数据结构堆排序图文示例
前言
本篇用C语言递归来实现二叉树的基本操作。主要用到分治思想
1.本篇文章和代码旨在用于链式二叉树基本操作的复习。主要是递归的应用。
2.深刻理解二叉树是递归定义的这一概念。
分治递归思想:
1.把大问题分割为不可再分割的子问题。。
2.然后一步一步的返回
一、二叉树的遍历算法
二叉树的精髓在于遍历。遍历掌握了后,剩下的问题迎刃而解。
1.构造二叉树
“工欲善其事必利其器”
1.所以先创建一个结构体。
2.手动先构造一颗如图所示的二叉树。
2.前序遍历(递归图是重点.)
遍历顺序:根 左子树 右子树
思路:
1.把每个节点都想成是一棵树。
2.当树为空时。
3.当树不为空时,先遍历左子树,后遍历右子树
注意:前中后序遍历不同处只在printf打印的顺序的位置。
打印结果:
1 2 3 NULL NULL NULL 4 5 NULL NULL 6 NULL NULL
递归分析图:
递归题目的万能的解法。就是画递归图。
二叉树的所有题目,假如你不会,赶快 画递归图 吧
由于递归太庞大,图片太小看不清,所以我把左子树和右子树分开又截了图
1.红线部分代表压栈递归。
2.绿线部分代表 返回
左子树
右子树
3.中序遍历
遍历顺序:左子树 根 右子树
打印结果
NULL 3 NULL 2 NULL 1 NULL 5 NULL 4 NULL 6 NULL
4.后序遍历
遍历顺序:左子树 右子树 根
打印结果
NULL NULL 3 NULL 2 NULL NULL 5 NULL NULL 6 4 1
5.层序遍历
思路:
借助先进先出的性质,上一层节点出的时候,带下一层的节点进去。
1.先把根入队列。
2.根节点出来的时候,左右孩子进去。
二、二叉树遍历算法的应用
1.求节点个数
思想:把大问题逐步分割为子问题。
思路:
1.树为空时返回0个节点。(树为空不意味着才开始就是空树,而是递归到最后一个为NULL的树返回)
2.树不为空时返回自己的1个节点+上一颗树返回的节点的个数。
2.求叶子节点个数
思路:
1.树为NULL时,返回0.
2.两颗子树都不为NULL时,返回1.
3.不满足以上两种情况,继续递归左右子树。
3.求第k层节点个数
思想:求上图第3层节点个数。
1.站在第1层来看,就是求第3层节点的个数
2.站在第2层的角度来看,就是求第2层节点的个数
3.站在第3层的角度来看,就是求第1层节点的个数
思路:
1.当树为空时返回0
2.当k为1时返回1。
3.不满足1和2,继续递归左右子树。
4.查找值为x的节点
思想:
1.把最小规模的问题写在最前面作为限制
2.不满足最小规模的问题,则继续递归。将问题一步一步拆分为不可分割的子问题。
5.二叉树销毁
思路:相当于二叉树的后序遍历。
先把左右子树遍历完后,开始遍历根,对根进行free。
6.前序遍历构建二叉树
思路:
对一串字符进行先序遍历,递归遍历二叉树,当遇见#时开始返回 连接 树。
通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树
7.判断二叉树是否是完全二叉树
思路:
1.层序遍历,空节点也进队列
2.出到空节点以后,出队列中所有数据,如果全是空,则是完全二叉树
8.求二叉树的深度
思路:二叉树的最大深度等价于:左右子树的最大深度 + 1
三、二叉树LeetCode题目
以下题目均属于LeetCode的 简单 题目
1.单值二叉树
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
只有给定的树是单值二叉树时,才返回 true;否则返回 false。
思想:
1.看一棵树的三个部分是否相同,相同则继续递归下一颗树,直到树为空。
2. 检查两颗树是否相同
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
3. 对称二叉树
给你一个二叉树的根节点 root , 检查它是否轴对称。
4.另一颗树的子树
思路:
用到了上一题判断两棵树是否相同的思想。
5.二叉树的前序遍历
题目思路
1.求节点个数,开辟数组大小。
2.前序遍历存放到数组中
6.反转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
我犯的BUG:只是对二叉树里面的值进行交换,但是无法避免空指针。一直都是空指针的错误,因为root总会为空,root->data总会遇见空指针
所以以后尽量要多想着交换地址。
以上就是C语言植物大战数据结构二叉树递归的详细内容,更多关于C语言二叉树递归的资料请关注编程学习网其它相关文章!