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
}
实现过程中遇到的困难
没有遇到困难。
今日收获
前序遍历的今日收获已经写了。