LeetCode 889 根据前序和后序遍历构造二叉树(Java 版)

该博客介绍了如何根据给定的前序和后序遍历结果,使用Java语言重建二叉树。文章详细解析了解题思路,包括通过前序遍历建立树结构以及利用后序遍历验证节点位置,还提供了带注释的完整和精简代码实现。
摘要由CSDN通过智能技术生成
题目描述

返回与给定的前序和后序遍历匹配的任何二叉树。
pre 和 post 遍历中的值是不同的正整数。

示例:==

输入:pre = [1,2,4,5,3,6,7], post = [4,5,2,6,7,3,1]
输出:[1,2,3,4,5,6,7]

依据题意:

前序遍历(中 - 左 - 右)
后序遍历(左 - 右 - 中)
一般来说,给定二叉树的任意的两个遍历结果,我们都可以重建二叉树。

解题思路

通过前序遍历的结果建立二叉树(使用递归),
通过后序遍历的结果验证是否到达了左右叶子结点(当前节点 root.val == post[index])。

技巧:通过前序遍历结果建立二叉树比较方便,因为前序遍历第一个就是二叉树的根节点

关键

前序遍历 中左右
后序遍历 左右中

前序遍历 先递归创建节点
在左右孩子递归完成后,将后序遍历的的索引后移一位

解题代码(有注释版)

class Solution {
   
	// 新建两个下标,分别指向前序遍历结果和后序遍历结果
    int preIndex = 0;
    int postIndex = 0;
    public TreeNode constructFromPrePost(int[] pre, int[] post) {
   
    	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值