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域中没有出现过的下标位置就是树根。