• 二叉搜索树的后序遍历序列


    【题目描述】
        输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
     
    【解题思路】
        在后序遍历得到的序列中,最后一个数字是树的根节点的数值。数组中前面的数字可以分为两部分:第一部分是左子树节点的值,它们都比根节点的值小;第二部分是右子树节点的值,它们都比根节点的值大。第一部分和第二部分可以使用递归的方式进行判断。
     
    【代码实现】
     1 class Solution {
     2 public:
     3     bool VerifySquenceOfBST(vector<int> sequence) {
     4         if(sequence.empty())
     5             return false;
     6            int root=sequence.back();//后序遍历的最后一个节点为根节点
     7         //在二叉搜索树中左子节点小于根节点,其中i为左右子树的分支点,根据i的值判断左右子树的存在性及其位置
     8         vector<int> leftSeq;
     9         int i;
    10         for(i=0;i<sequence.size()-1;++i)
    11         {       
    12             if(sequence[i]>root)
    13                 break;
    14             else
    15                 leftSeq.push_back(sequence[i]);
    16         }
    17         //在二叉搜索树种右子节点大于根节点,如果存在小于根节点的数值直接退出
    18         vector<int> rightSeq;
    19         int j;
    20         for(j=i;j<sequence.size()-1;++j)
    21         {
    22             if(sequence[j]<root)
    23                 return false;
    24             else
    25                 rightSeq.push_back(sequence[j]);
    26         }
    27 
    28         //判断左子树是否是二叉搜索树
    29         bool left=true;
    30         if(i>0)
    31             left=VerifySquenceOfBST(leftSeq);
    32 
    33         //判断右子树是否是二叉搜索树
    34         bool right=true;
    35         if(i<sequence.size()-1)
    36             right=VerifySquenceOfBST(rightSeq);
    37 
    38         return (left&&right);
    39     }
    40 };
  • 相关阅读:
    html中frameset的详细使用方法
    日期控件API
    限制input输入类型(多种方法实现)
    springmvc导出excel并弹出下载框
    Spring mvc 验证码的做法
    Spring Boot 集成MyBatis
    Spring Boot 实践折腾记(三):三板斧,Spring Boot下使用Mybatis
    支付系统架构
    javaScript事件(六)事件类型之滚轮事件
    你不是真正的快乐
  • 原文地址:https://www.cnblogs.com/lou424/p/5047710.html
Copyright © 2020-2023  润新知