日常刷题-二叉树得后序遍历序列

package com.daily.daily20210201;

/**
 * @Project: dailyCode
 * @Site: http://www.zhao1iang.club/
 * @Copyright: ©CodeLamp
 * @Author: zhaoliang
 * @Create: 2021-02-01 15:58
 * @Desc: 二叉树得后序遍历序列
 **/
public class VerifySquenceOfBST {
    //输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
    public boolean VerifySquenceOfBST(int[] sequence){
        if (sequence==null || sequence.length==0)return false;
        return helper(sequence,0,sequence.length-1);
    }

    private boolean helper(int[] sequence, int first, int last) {
        if (last - first <=1)return true;
        int rootVal = sequence[last];
        int curIndex = first;
        while(curIndex < last && sequence[curIndex] <= rootVal){
            curIndex++;
        }
        for (int i = curIndex; i <last ; i++) {
            if (sequence[i] < rootVal){
                return false;
            }
        }
        return helper(sequence,first,curIndex-1) && helper(sequence,curIndex,last-1);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 已知二叉树后序遍历序列,可以通过递归的方式还原二叉树。 具体步骤如下: 1. 后序遍历序列的最后一个元素为二叉树的根节点。 2. 从后序遍历序列的第一个元素开始,找到第一个大于根节点的元素,它之前的所有元素都属于根节点的左子树,之后的所有元素都属于根节点的右子树。 3. 递归处理左子树和右子树,直到序列为空或只有一个元素。 举个例子,假设后序遍历序列为[4, 5, 2, 6, 3, 1],那么1就是根节点,[4, 5, 2, 6, 3]就是左子树和右子树的后序遍历序列。 接下来,我们可以找到第一个大于1的元素为3,所以[4, 5, 2, 6]是左子树的后序遍历序列,[3]是右子树的后序遍历序列。 继续递归处理左子树和右子树,左子树的根节点为3,左子树为空,右子树的根节点为6,左子树为空,右子树为2,左子树为4,右子树为5。 最终还原出的二叉树如下所示: ``` 1 / \ 3 2 / \ 6 5 / 4 ``` ### 回答2: 已知二叉树后序遍历序列如何还原。 后序遍历二叉树遍历的一种方式,遍历顺序是先遍历左子树,再遍历右子树,最后访问根节点。根据后序遍历序列可以还原出原始的二叉树的结构。方法如下: 1. 首先,找到二叉树的根节点。后序遍历序列的最后一个元素即为根节点。 2. 在后序遍历序列中找到根节点后,可以将后序遍历序列分为两部分:左子树的后序遍历序列和右子树的后序遍历序列。 3. 对于左子树的后序遍历序列和右子树的后序遍历序列,可以通过递归的方式继续还原出左子树和右子树。 4. 递归的终止条件是后序遍历序列为空或只有一个元素,此时可以直接返回该节点。 5. 通过递归还原出左子树和右子树后,再将根节点与左子树和右子树连接起来,构成完整的二叉树。 以上步骤可以通过递归算法来实现。我们可以定义一个函数,接收后序遍历序列作为输入,返回还原后的二叉树的根节点。 总结起来,还原二叉树后序遍历序列的步骤是:找到根节点,分隔出左右子树的后序遍历序列,递归还原左右子树,最后连接根节点和左右子树。 ### 回答3: 已知二叉树后序遍历序列如何还原,可以通过递归方法进行。后序遍历的顺序是:左子树,右子树,根节点。所以我们可以从后序遍历序列中找到根节点,然后再划分左子树和右子树的序列。 具体步骤如下: 1. 首先,找到根节点。根据后序遍历的顺序,最后一个元素即为根节点的值。 2. 划分左子树和右子树的序列。在后序遍历中,根节点之前的序列中,是左子树的元素;根节点之后的序列中,之前的元素是右子树的元素。 3. 对于左子树和右子树的序列,分别递归地调用还原二叉树的方法,得到左子树和右子树。 4. 将左子树和右子树连接到根节点上,形成一棵完整的二叉树。 5. 最后,返回该二叉树。 需要注意的是,如果给定的后序遍历序列为空,则返回空。 总结起来,还原二叉树后序遍历序列可以通过递归的方法,先找到根节点,然后根据根节点将序列划分为左子树和右子树,再递归地调用还原方法,最后将左子树和右子树连接到根节点上。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值