[Go版]算法通关村第六关青铜——如何使用中序和后序来恢复一颗二叉树

树的遍历方式

树的常见遍历方法:

深度优先遍历

先往深走 ,遇道叶子节点再往回走。
说明:下面的前中后序指的是相对于中间节点的位置。

  • 前序遍历:中左右
  • 中序遍历:左中右
  • 后序遍历:左右中
    在这里插入图片描述

广度优先遍历

一层一层的去遍历,一层访问完再访问下一层。

使用中序后序恢复二叉树

  • 中序:3 4 8 6 7 5 2 1 10 9 11 15 13 14 12
  • 后序:8 7 6 5 4 3 2 10 15 14 13 12 11 9 1

图解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题目:从前序与中序遍历序列构造二叉树

题目链接:LeetCode-105. 从前序与中序遍历序列构造二叉树
在这里插入图片描述

思路:递归+“每个节点都可以是根节点”

Go代码

func buildTree(preorder []int, inorder []int) *TreeNode {
    if len(preorder) == 0 {
        return nil
    }
    root := &TreeNode{Val: preorder[0]}
    i:=0
    for ;i<len(inorder);i++ {
        if inorder[i] == root.Val {
            break
        }
    }
    // 中序中:左中右,根节点左边都是left节点,右边都是right节点
    // 前序中:中左右,根节点后left节点遍历完了之后紧跟着right节点,这里left节点、right个数可以从中序中获取
    root.Left = buildTree(preorder[1:len(inorder[:i])+1], inorder[:i])
    root.Right = buildTree(preorder[len(inorder[:i])+1:], inorder[i+1:])
    return root
}

题目:从中序与后序遍历序列构造二叉树

题目链接:LeetCode-106. 从中序与后序遍历序列构造二叉树
在这里插入图片描述

Go代码

func buildTree(inorder []int, postorder []int) *TreeNode {
    length := len(postorder)
    if length == 0 {
        return nil
    }
    root := &TreeNode{Val:postorder[length-1]}
    i:=0
    for ;i<len(inorder); i++ {
        if inorder[i] == root.Val {
            break
        }
    }
    root.Left = buildTree(inorder[:i], postorder[:len(inorder[:i])])
    root.Right = buildTree(inorder[i+1:], postorder[len(inorder[:i]):len(postorder)-1])
    return root
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值