用数组来存储二叉树如何遍历的呢?
如果父节点的数组下表是i,那么它的左孩子就是i * 2 + 1,右孩子就是 i * 2 + 2。
二叉树的遍历方式:
二叉树有三种基本遍历方式,分别是前序遍历、中序遍历和后序遍历。遍历的原理是从根节点开始,按照特定方式递归遍历左子树和右子树,每次对访问到的节点进行操作。
- 前序遍历:先访问根节点再访问左子树,最后访问右子树。
- 中序遍历:先访问左子树再访问根节点,最后访问右子树。
- 后序遍历:先访问左子树再访问右子树,最后访问根节点
这里前中后,其实指的就是中间节点的遍历顺序,只要记住 前中后序指的就是中间节点的位置就可以了
看如下中间节点的顺序,就可以发现,中间节点的顺序就是所谓的遍历方式
- 前序遍历:中左右
- 中序遍历:左中右
- 后序遍历:左右中
前序遍历
对每颗子树,均遵循根节点–>左节点–>右节点
func preShowTree(head *Node) {
if head == nil {
return
}
fmt.Println(head.V)//第一次来到节点的时候打印
showTree(head.Left)
showTree(head.Right)
}
中序遍历
中序:对每颗子树,均遵循左节点–>根节点–>右节点
func midShowTree(head *Node) {
if head == nil {
return
}
showTree(head.Left)
fmt.Println(head.V)//第二次来到节点的时候打印
showTree(head.Right)
}
后序遍历
后序:对每颗子树,均遵循左节点–>右节点–>根节点
func afterShowTree(head *Node) {
if head == nil {
return
}
showTree(head.Left)
showTree(head.Right)
fmt.Println(head.V)//第三次来到节点的时候打印
}