树有没有可能用数组实现?
一般的树用数组实现起来是很困难的.
有一种树用数组实现非常方便,那就是完全二叉树.
如图,从上往下给树依次编号,然后用数组存储起来,这是非常容易的.
而且,对于任何一个结点,都可以找出它的父亲结点,左儿子和右儿子.规律如下,可以把任何实例代入下面,都可以验证. 这样来说,这颗完全二叉树就是顺序存储的
对于一般的二叉树呢?可以用类似这种方法实现么?答案是可以的
把一般二叉树补齐成为一颗完全二叉树就可以了,但是会空出很多,空间比较浪费. 以空间为代价.
二叉树的链表结构:
它每个结点的结构体如下:
typedef struct TreeNode *BinTree
typedef BinTree Position
struct TreeNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
其实就是一个表示结点本身信息的数据域(一个或多个普通变量)和两个指针.
树有4种遍历方式
先序遍历,中序遍历,后序遍历和层次遍历
先序遍历:先访问自己再访问左儿子结点,访问左儿子结点的时候,又是先访问自己,再访问左儿子结点,没有左儿子了再访问右儿子.(不懂看看书上的图最好)
对于每个结点都这样,所以我们想到了用递归的方式去做,这里理解递归的话,更好理解程序代码.
中序遍历,后序遍历,都和上面差不多.
这种遍历是采用递归的方式. 对于算法来说,能采用迭代尽量采用迭代,而尽量不采用递归的方式.
我们可以采用非递归用堆栈的方式实现.