1.链表表示法
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
2.数组表示法:将二叉树看作完全二叉树
缺点,如果树很稀疏的话,空间浪费比较大。
优点,父子结点、兄弟结点之间通过下标计算可以很方便的找到。
3.结构数组(相当于静态链表)表示法
//结构数组表示二叉树
#define ElementType char
#define Tree int
#define Null -1
struct TreeNode
{
ElementType Element;
Tree Left;
Tree Right;
};
上面两图为同一树的结构数组的不同表示方法。
可以看出,其表示方法不唯一,且树根不一定在下标0号位置。
故涉及到找树根的问题:在Left和Right域中没有出现过的下标位置就是树根。