【数据结构】【二叉树】先序中序后序遍历解题报告

leetcode的题目:

给定一个二叉树,给出二叉树的先序、中序、后序的遍历结构
在这里插入图片描述

解题思路【递归解法】:

###  1.第一个知识点二叉树的先序遍历、中序遍历、后序遍历
先序遍历结构:根 --> 左 -> 右 遍历结果:1->2->3
中序遍历结构:左–> 根–> 右 遍历结果:1->3->2
后序遍历结构:左–>右–>根 遍历结果:3->2->1
### 2. 第一种解法:递归的解法;递归的解法三种遍历相差不大,因此就写一个先序遍历;递归比较简单直接上代码就可以;以go语言为例子;

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
 
func preorderTraversal(root *TreeNode) []int {
    var a []int
    doPreorder(root,&a)
    return a
}
func doPreorder(root *TreeNode, result *[]int){
    if root ==nil{
        return 
    }
    *result = append(*result,root.Val)
    doPreorder(root.Left,result)
    doPreorder(root.Right,result)
}

###3. 递归的解法在go语言里面有两个点需要注意:

  • 在leetcoe中要求返回的是一个数组,因此如果直接在该方法中进行递归去return在遇到nil的节点会把数组清空,因此递归不能return,需要开辟一个新的方法去调用;

  • 在开辟数组调用传slice的是时候,需要传个指针,这里由于在go中都是值传递,而map、chan、slice比较特殊默认传的是指针,但是如果用了slice的append方法则更为特殊;具体看这篇博客写的:https://www.cnblogs.com/snowInPluto/p/7477365.html

解题思路【非递归解法】

思路的灵感:根据递归操作的解法,

  1. 是一个从根节点一直到最左子树的叶子节点;
  2. 然后向前返回;找到右节点
  3. 重复步骤一
    因此很容易想到是一个压栈的操作,一直压倒最左子树的叶子节点,然后从栈顶弹出,判断其是否有右节点,然后重复压栈操作;
    开始上代码:
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
 // 前序遍历
func preorderTraversal(root *TreeNode) []int {
   
	var result []int
	<
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值