首页 > 其他分享 >树与二叉树与森林

树与二叉树与森林

时间:2023-12-25 20:34:03浏览次数:33  
标签:结点 遍历 孩子 BT 二叉树 节点 森林

2、若将一棵树T转化为对应的二叉树BT,则下列对BT的遍历中,其遍历序列与T的后根遍历序列相同的是______。

A.先序遍历 B.中序遍历 C.后序遍历 D.按层遍历

解析:

在后根遍历(也称为后序遍历或后序遍历)中,对于T的每个节点,首先遍历其左子树,然后遍历其右子树,最后访问该节点本身。

而在中根遍历(也称为中序遍历)中,对于BT的每个节点,首先遍历其左子树,然后访问该节点本身,最后遍历其右子树。

由于将T转化为BT时会保持T的左子树和右子树的相对位置不变,所以T的后根遍历序列会对应BT的中根遍历序列。

因此,对BT进行中根遍历将得到与T的后根遍历序列相同的结果。

所以选择B。

什么是树?

摘录于:#图解 数据结构:树和森林与二叉树的相互转换 - 知乎 (zhihu.com)

树(Tree)是一种非线性的数据结构。

树是n(n≥0)个节点的有限集。n=0时,称为空树。

树由唯一的根和若干棵互不相交的子树组成。

img

一棵树

每一棵子树又是一棵树,也是由唯一的根节点和若干棵不相交的子树组成的。

img

子树

img

树的定义是递归的

我们可以发现,树的定义是递归。大可以无限套娃!

什么是森林?

很容易想到,由树组成森林。

专业一点的定义是:若干棵互不相交的树的集合

img

森林

什么是二叉树?

img

理解了树,稍加限制条件就是二叉树了。

二叉树就是有限制条件的树。

限制条件有二:

img

什么是度就不用我讲了吧。我还是讲吧,一句话带过。

节点的度:节点拥有的子树个数或者分支的个数。

在此,我们不妨看看二叉树的节点。

img

二叉树的节点


下面我们要用的是左孩子右兄弟的方法,

简单三步就能将树和二叉树相互转换。

树 -> 二叉树

img

一颗普通的树

1.加线。在所有的兄弟结点之间加一条线。

动图

加线

2.去线。树中的每个结点,只保留它与第一个孩子结点的连线,删除其他孩子结点之间的连线。

动图

去线

3.调整。以树的根结点为轴心,将整个树调节一下(第一个孩子是结点的左孩子,兄弟转过来的孩子是结点的右孩子)

动图

调整

所以最终结果为:

img

树转二叉树

二叉树 -> 树

知道了树转换为二叉树,那么二叉树转换为树就是个逆过程呗。

1.调整。将二叉树从左上到右下分为若干层。然后调整成水平方向。

动图

调整

2.加线。找到每一层节点在其上一层的父节点,加线。

动图

加线

3.去线。去除兄弟节点之间的连线。

动图

所以最终结果为:

img

二叉树转为树

二叉树 -> 森林

在此我需要再次强调的是,根据孩子兄弟表示法,根节点是没有兄弟的

前提:加入一棵二叉树的根节点有右孩子,则这棵二叉树能够转换为森林,否则转换为一棵树。

img

1.删除右孩子连线。

从根节点开始,若右孩子存在,则把与右孩子结点的连线删除。再查看分离后的二叉树,若其根节点的右孩子存在,则连续删除。直到所有这些根结点与右孩子的连线都删除为止。

动图

2.将每棵分离后的二叉树转换为树

动图

二叉树转换为树

所以最终结果为:

img

二叉树->森林

Nice!Nice!Nice!

搞定!

标签:结点,遍历,孩子,BT,二叉树,节点,森林
From: https://www.cnblogs.com/KAI040522/p/17926927.html

相关文章

  • 羚通视频智能分析平台安防监控视频平台森林烟火识别明火算法检测预警
    随着科技的不断发展,人工智能技术在各个领域都取得了显著的成果。在安防监控领域,羚通视频智能分析平台凭借其强大的功能和优越的性能,为森林防火工作提供了有力的技术支持。本文将详细介绍羚通视频智能分析平台的森林烟火识别明火算法检测预警功能,以及如何利用这一技术手段保护我们的......
  • 羚通视频智能分析平台安防监控视频平台森林烟火识别明火算法检测预警
    随着科技的不断发展,人工智能技术在各个领域都取得了显著的成果。在安防监控领域,羚通视频智能分析平台凭借其强大的功能和优越的性能,为森林防火工作提供了有力的技术支持。本文将详细介绍羚通视频智能分析平台的森林烟火识别明火算法检测预警功能,以及如何利用这一技术手段保护我们......
  • 二叉树 - 基本概念
    1.树的基本概念与数组链表不同,树是一种非线性的存储结构,它由n(n>=0)个节点构成并具有层次关系的存储结构把这个存储结构叫做树是因为它看上去像一颗倒挂着的树,只是根在上叶子在下它有以下特性:1. 有一个特殊的结点,称为根结点,根结点没有前驱结点2.树是由若干不相交的......
  • 完全二叉树的公共父结点
    1.有点后序遍历的思想,就是先把左子树,右子树的结果算出来,然后合并到根节点。2.合并时四种情况分类讨论.3.对于遇到要找的点就可以直接返回,不管另一个点在这个点下面还是在别的子树上,都是正确的intn,m;inta[N];intquery(introot,intx,inty){ //cerr<<root<<endl; if(r......
  • 637. 二叉树的层平均值
    目录题目题解:BFS题目给定一个非空二叉树的根节点root,以数组的形式返回每一层节点的平均值。与实际答案相差10-5以内的答案可以被接受。题解:BFSclassSolution:defaverageOfLevels(self,root:Optional[TreeNode])->List[float]:q=[root]#用列表做......
  • 二叉树给出先序和中序遍历序列,求和树 要求输出中序遍历序列;
    1.就算不知道用vector的初始化,也可以手动赋值创建子数组。2.不断找到当前序列对应的根节点,计算他的子节点的总和,在这样递归处理过程中,注意要中序输出,所以对于是先遍历完左子树,然后输出答案,然后遍历右子树#include<bits/stdc++.h>usingnamespacestd;#definelllonglong//......
  • 二叉树已经知道先序中序推后序
    https://www.acwing.com/problem/content/3601/不断找新的先序的根节点,根据位置切割中序,根据中序左右子树大小反切割先序,找到左子树对应的先序中序,然后递归处理#include<stdio.h>#include<vector>#include<map>#include<algorithm>#include<algorithm>#include<iostream>......
  • C++U5-11-特殊二叉树
    学习目标 完全二叉树:二又树拥有的性质,在完全二叉树中都拥有 性质 练习1 练习2 练习3编程题:[完全二叉树的叶子结点]【算法分析】递归,前序遍历输出。【参考代码】#include<iostream>usingnamespacestd;constintSIZE=1010;structnode{......
  • 662. 二叉树最大宽度(中)
    目录题目题解:BFS正解:优化题目给你一棵二叉树的根节点root,返回树的最大宽度。树的最大宽度是所有层中最大的宽度。每一层的宽度被定义为该层最左和最右的非空节点(即,两个端点)之间的长度。将这个二叉树视作与满二叉树结构相同,两端点间会出现一些延伸到这一层的null......
  • 543. 二叉树的直径
    给你一棵二叉树的根节点,返回该树的 直径 。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。两节点之间路径的 长度 由它们之间边数表示。 示例1:输入:root=[1,2,3,4,5]输出:3解释:3,取路径[4,2,1,3]或[5,2,1,......