对于数组表示的二叉树:简单遍历,无前中后序
函数:
创造函数和析构函数——创建和销毁树
SearchNode(Tree *pTree,int nodeIndex):搜索节点,要指定数组下标
AddNode(Tree *pTree,int nodeIndex,int direction,Node *pNode):指定往哪一个下标的节点上去添加节点;指定方向:添加的是左孩子还是右孩子;指定要添加的节点:把要添加的节点挂在指定的位置上(相对于根节点而言)
树的节点的搜索:指定当前节点的索引(下标)即可找到对应的数据
完全可以把一个数组看作一个二叉树
一个节点若只有右子树而没有左子树,则用 0表达当前位置不存在节点的情况。
索引是与数组与生俱来的。
对于父节点来说,其下标*2+1:左孩子 ; 其下标*2+2:右孩子
用数组表达二叉树。 没有节点的地方用0表示。父节点下标*2+1 表示左孩子。 父节点下标*2+2表示右孩子
我们在构建树的时候一般都不会用数组,因为我们一开始不会知道树有多少个节点,用数组的话我们是一开始就声明一段连续的内存,如果节点没有预设的那么多就会浪费内存;如果节点超出预计数量,就要重新建立一个新的数组把原来数组的数据传去新的数组,这样会浪费计算资源。用指针的话方便无限添加新节点,用数组建构的树,节点与节点之间不需要是连续的内存,只需要在建立新节点的时候把指针指向父节点即可,方便对树进行添加与删除的操作。
节点序列 根节点序列为n,则2n+1为根节点的左节点
二叉树用数组表示的时候:
父节点的左节点的 index为:父节点index*2+1
父节点的右节点的 index为:父节点index*2+2
数组和树之间的关系
父节点下标*2+1 该节点左 父节点下标*2+2 该节点右
父亲节点下标*2+1 该节点左 父亲节点下标*2+1 该节点右
关于数组与树之间的算法转换
二叉树表示