有一种严格同构:根左子树右子树三者相同
在这里左右子树可以交换位置
判断指数是否相同
注意**不要求根结点作为第一个数据输入
如第二张图的例子,G第一个输入但是G不是根结点
输入格式:自身信息+左儿子+右儿子
问题来了:怎么判断根结点(关键问题)
需要考虑三个问题:
1.二叉树表示一般用链表或者数组,这里研究怎么用数组表示
先考虑第一个问题:
若用链表表示一般用两个指针,一个指向left一个指向right
用数组表示:按照完全二叉树的组织形式来表示一个二叉树
缺少的结点在数组中空出来
基本的存储用数组,把需要的结点信息存储在数组中, 但左右儿子用类似链表的方式来表示 ,有一个 数据来指示左儿子右儿子在哪里
物理上的存储是数组但是他的思想是一种链表的思想。
数组里的每个分量是一个结构, 每一列是数组的一个分量,这是一个结构。结构包含三个信息,一个ABCD表示这个结点本身的信息
**注意left right不是指向左儿子右儿子指针,而是指向左儿子右儿子位置的下标
数组正常的下标是从0开始的,怎么表示指向一个空的结点?用-1
因为left right不是指针,当它指向的左右指针空缺时,不能指向NULL
NULL在stdlb.h中的定义是0,空指针是0,它的值实际上是0,在这里不能有NULL(因为0也是下标!!!)
为了区分传统空指针的NULL,这里定义了Null
#define Null -1;
二叉树的表示不是唯一的,且ABCD的顺序可以改变
因为这种表示方法的灵活性,所以它具有链表的灵活性,但是它是使用数组进行表示的,所以称为“静态链表”
怎么确定根结点?看数组所有的下标中哪个没有在left right中出现