美文网首页
重建二叉树

重建二叉树

作者: 九日火 | 来源:发表于2020-06-01 14:33 被阅读0次
class TreeNode:
    def __init__(self, x):
        self.val = x        
        self.left = None        
        self.right = None
class Solution:    
    # 返回构造的TreeNode根节点    
    def reConstructBinaryTree(self, pre, tin):        
        # write code here        
        if len(pre) == 0:            
            return None        
        if len(pre) == 1:            
            return TreeNode(pre[0])        
        else:            
            res = TreeNode(pre[0])   
            # 中左         
            res.left = self.reConstructBinaryTree(pre[1: tin.index(pre[0]) + 1], tin[: tin.index(pre[0])])
             # 中右           
            res.right = self.reConstructBinaryTree(pre[tin.index(pre[0]) + 1: ], tin[tin.index(pre[0]) + 1: ])        
        return res
package main

import "fmt"

type binaryTreeNode struct {
    Value int
    Left  *binaryTreeNode
    Right *binaryTreeNode
}

func (root *binaryTreeNode) preorderTraversal() {
    if root == nil {
        return
    }
    fmt.Printf("%d\t", root.Value)
    if root.Left != nil {
        root.Left.preorderTraversal()
    }
    if root.Right != nil {
        root.Right.preorderTraversal()
    }
}

func (root *binaryTreeNode) inorderTraversal() {
    if root == nil {
        return
    }
    if root.Left != nil {
        root.Left.inorderTraversal()
    }
    fmt.Printf("%d\t", root.Value)
    if root.Right != nil {
        root.Right.inorderTraversal()
    }
}

func construct(preorderSlice []int, inorderSlice []int) (root *binaryTreeNode) {
    if len(preorderSlice) == 0 || len(inorderSlice) == 0 {
        return
    }
    v, i := preorderSlice[0], 0
    for ; inorderSlice[i] != v; i++ {
    }
    root = &binaryTreeNode{Value:v}
    root.Left = construct(preorderSlice[1:i+1], inorderSlice[:i])
    root.Right = construct(preorderSlice[i+1:], inorderSlice[i+1:])
    return
}

func main() {
    preorderSlice := []int{1, 2, 4, 7, 3, 5, 6, 8}
    inorderSlice := []int{4, 7, 2, 1, 5, 3, 8, 6}
    root := construct(preorderSlice, inorderSlice)
    root.preorderTraversal()
    fmt.Println()
    root.inorderTraversal()
}

相关文章

  • LeetCode 每日一题 [42] 重建二叉树

    LeetCode 重建二叉树 [中等] 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历...

  • Java后端开发算法基础面试题分享,你离大厂也许就差这份面试题!

    一、算法基础 1. 重建二叉树 题目: 输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。 注意: 二叉树中...

  • 重建二叉树

    已知二叉树的前序和中序遍历序列,以此重建二叉树。 重建二叉树,必须知道前序和中序序列,其他组合都不行。 publi...

  • 剑指Offer(四)

    剑指Offer(四) 重建二叉树 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的...

  • Java日记2018-06-19

    重建二叉树 矩阵中的路径

  • 一题一算法2018-02-06(重建二叉树)

    题目:重建二叉树 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍...

  • 重建二叉树

    《剑指offer》面试题7:重建二叉树 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前...

  • 重建二叉树

    题目来源:牛客网--重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序...

  • java中如何实现重建二叉树

    java中如何实现重建二叉树 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和...

  • 07:重建二叉树

    题目07:重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果...

网友评论

      本文标题:重建二叉树

      本文链接:https://www.haomeiwen.com/subject/fvajzhtx.html