【C++】树

树详解

满二叉树与完全二叉树的区别及判断

二叉树的实现(数组形式)

二叉树的详细实现

思考如何将非线性的数据,以线性的方式存储

在这里插入图片描述
普通树的存储

双亲表示法:
求父节点比较方便
在这里插入图片描述
前面是元素在数组的索引,后面储存的是父节点的索引,数组保存不一定按照A,B…F,G储存,可以随意。但是要记录父节点的索引,这样可以根据数组结构画出树的结构。
在这里插入图片描述

孩子表示法:
求子节点比较方便
在这里插入图片描述
后面储存子节点的指针

双亲孩子表示法:
在这里插入图片描述
二叉树表示法:
把一个普通树转化为二叉树来存储

方法:设法保证任意一个节点左指针指向它的第一个孩子,右指针指向它的下一个兄弟。
在这里插入图片描述
这样转化一定没有右子树

森林的存储:
在这里插入图片描述
转化后:
在这里插入图片描述
任何一个普通树转化为二叉树,都没有右子树。利用这个特点可以让其他树作为其右子树。

二叉树的遍历

先序遍历

中序遍历

后序遍历

在这里插入图片描述

所有的都可以总结为以上四种情况。

已知前中序求后序、已知中后序求前序

已知两种遍历序列,求原始二叉树

已知先序和中序求后序

示例1:
先序:ABCDEFGH
中序:BDCEAFHG
求后序:DECBHGFA

示例2:
先序:ABDGHCEFI
中序:GDHBAECIF
求后序:GHDBEIFCA

示例3:
先序:ABFDCLMN
中序:BFACDLNM
求后序:FBCNMLDA

示例4:
先序:MFLAQGBE
中序:FALGQMEB
求后序:AGQLFEBM

已知中序和后序求先序

中序:BDCEAFHG
后序:DECBHGFA
求先序:ABCDEFGH

思路:可以根据先序或后序找出根节点,然后根据中序将其分为左子树和右子树。依次循环往复

猜你喜欢

转载自blog.csdn.net/weixin_48180029/article/details/113540831