代码随想录算法训练营第十四天| 144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历(前中后序的递归写法)

97 阅读2分钟

144. 二叉树的前序遍历

题目链接

leetcode.cn/problems/bi…

文章链接

programmercarl.com/%E4%BA%8C%E…

视频链接

www.bilibili.com/video/BV1Wh…

看到题目的第一想法

这道题其实本身不难,但是我首先想到的就是迭代法,不知道用递归怎么做,迭代法也没写出来,索性就去看卡哥的视频了。

看完代码随想录之后的想法

看完了过后才发现递归法如此简单,前序遍历是“根左右”,直接按照顺序递归就可以了,需要注意的就是“递归三部曲”的步骤。下面附上我的go语言代码:

func preorderTraversal(root *TreeNode) (result []int) {
    if root == nil {
        return nil
    }
    result = append(result, root.Val)
    result = append(result, preorderTraversal(root.Left)...)
    result = append(result, preorderTraversal(root.Right)...)
    return result 
}

实现过程中遇到的困难

实现的过程中遇到的困难就是result = append(result, preorderTraversal(root.Left)...)后面有3个点之前搞忘了,毕竟是切片。还有root.Left写成了root.Left.Val,后来才发现传的参数是TreeNode的指针类型,所以不能是Val。

今日收获

今天的收获就是知道了如何使用递归法,也知道了卡哥的“递归三部曲”。

94. 二叉树的中序遍历

题目链接

leetcode.cn/problems/bi…

文章链接

programmercarl.com/%E4%BA%8C%E…

视频链接

www.bilibili.com/video/BV1Wh…

看到题目的第一想法

一气呵成,直接将前序遍历的其中两句代码换一下位置就好了。下面附上我的go语言代码:

func inorderTraversal(root *TreeNode) (result []int) {
    if root == nil {
        return nil
    }
    result = append(result, inorderTraversal(root.Left)...)
    result = append(result, root.Val)
    result = append(result, inorderTraversal(root.Right)...)
    return result
}

实现过程中遇到的困难

还是result = append(result, inorderTraversal(root.Left)...)的最后3个点忘记加了,其他的都没有困难。

今日收获

前序遍历的今日收获已经写了。

145. 二叉树的后序遍历

题目链接

leetcode.cn/problems/bi…

文章链接

programmercarl.com/%E4%BA%8C%E…

视频链接

leetcode.cn/problems/bi…

看到题目的第一想法

还是前序遍历的其中两句代码互换位置就行了,下面附上我的go语言代码:

func postorderTraversal(root *TreeNode) (result []int) {
    if root == nil {
        return nil
    }
    result = append(result, postorderTraversal(root.Left)...)
    result = append(result, postorderTraversal(root.Right)...)
    result = append(result, root.Val)
    return result
}

实现过程中遇到的困难

没有遇到困难。

今日收获

前序遍历的今日收获已经写了。