题目描述
给定一个二叉树的根节点 root ,返回它的 中序 遍历。
测试case
case 1
输入:root = [1,null,2,3]
输出:[1,3,2]
case 2
输入:root = []
输出:[]
case 3
输入:root = [1]
输出:[1]
解题思路
二叉树中序遍历的顺序 : 现输出左节点,在输出自身,最后输出右节点
代码实现
递归实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
func inorderTraversal(root *TreeNode) []int { r := make([]int, 0) if nil == root { return r }
mid(&r, root) return r }
func mid(res *[]int, root *TreeNode) { if root.Left != nil { mid(res, root.Left) } *res = append(*res, root.Val) if root.Right != nil { mid(res, root.Right) } }
|
迭代实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
func inorderTraversal(root *TreeNode) []int { res := make([]int, 0) if root == nil { return res } stack := []*TreeNode{root} flag := false for len(stack) != 0 { if flag { rightChild := stack[len(stack)-1].Right res = append(res, stack[len(stack)-1].Val) stack = stack[:len(stack)-1] if rightChild != nil { stack = append(stack, rightChild) flag = false } continue } leftChild := stack[len(stack)-1].Left if leftChild != nil { stack = append(stack, leftChild) continue } flag = true } return res }
|