• leetcode106-根据中序和后续遍历构建二叉树


    根据中序和后续遍历构建二叉树

    • 中序遍历:左子树,根节点,右子树
    • 后序遍历: 左子树,右子树,根节点
    • 后序遍历的最后一个元素即根节点的值
    • 根节点在中序遍历中的索引index等于左子树长度

    代码

    /**
     * Definition for a binary tree node.
     * type TreeNode struct {
     *     Val int
     *     Left *TreeNode
     *     Right *TreeNode
     * }
     */
    func buildTree(inorder []int, postorder []int) *TreeNode {
    	if len(inorder) == 0{
    		return nil
    	}
        l := len(postorder)-1			// root节点所在位置的index
    	rootVal := postorder[l]			// 获得root节点
    	root := &TreeNode{Val: rootVal} // 构建根节点
    	// root := new(TreeNode)
    	// root.Val = rootVal
    	i :=0							// 查找根节点在中序遍历中的位置index
    	for ;i<len(inorder);i++{
    		if inorder[i] == rootVal{
    			break
    		}
    	}
    	// i可以理解为是左子树的长度
    	// 在中序遍历中,inorder[:i]即左子树的元素; 在后序遍历中,postorder[:i]也为左子树的元素
    	root.Left = buildTree(inorder[:i],postorder[:i])
    	// 在中序遍历中,inorder[i+1:]为右子树的元素,i为根节点,i+1即把根节点剔除 
    	// 在后序遍历中,postorder[i:l]为右子树的元素,切片截取为左闭右开,此处获取不到l对应的根节点原素
    	root.Right = buildTree(inorder[i+1:],postorder[i:l])
    	return root
    }
    
  • 相关阅读:
    Hashtable源码分析
    ConcurrentHashMap1.7源码分析
    JDK1.8新特性
    回炉Spring--Bean生命周期及AOP
    @DateTimeFormat 和 @JsonFormat 注解
    面向切面编程-日志切面应用及MDC使用
    maven 多模块开发
    maven 安装
    ztree树节点重叠问题
    Java问题解读系列之IO相关---Java深拷贝和浅拷贝
  • 原文地址:https://www.cnblogs.com/litchi99/p/13504302.html
Copyright © 2020-2023  润新知