zoukankan      html  css  js  c++  java
  • 面试题24:二叉搜索树后序遍历

    判断左子树小于根节点,右子树大于根节点,然后递归

     1 bool VerifySquenceOfBST(int sequence[], int length)
     2 {
     3     if(sequence == NULL || length <= 0)
     4         return false;
     5 
     6     int root = sequence[length - 1];
     7 
     8     // 在二叉搜索树中左子树的结点小于根结点
     9     int i = 0;
    10     for(; i < length - 1; ++ i)
    11     {
    12         if(sequence[i] > root)
    13             break;
    14     }
    15 
    16     // 在二叉搜索树中右子树的结点大于根结点
    17     int j = i;
    18     for(; j < length - 1; ++ j)
    19     {
    20         if(sequence[j] < root)
    21             return false;
    22     }
    23 
    24     // 判断左子树是不是二叉搜索树
    25     bool left = true;
    26     if(i > 0)
    27         left = VerifySquenceOfBST(sequence, i);
    28 
    29     // 判断右子树是不是二叉搜索树
    30     bool right = true;
    31     if(i < length - 1)
    32         right = VerifySquenceOfBST(sequence + i, length - i - 1);
    33 
    34     return (left && right);
    35 }

     用容器

     1 bool VerifySquenceOfBST(vector<int> sequence) {
     2     int len = sequence.size();
     3     if (len <= 0)
     4         return false;
     5     if (len <= 2)
     6         return true;
     7     int root = sequence[len - 1];
     8     int i = 0;
     9     for (; i < len - 1; i++)
    10     {
    11         if (sequence[i] > root)
    12             break;
    13     }
    14     int j = i;    //分割
    15     for (; j < len - 1; j++)
    16     {
    17         if (sequence[j] < root)
    18             return false;
    19     }
    20     bool left = true;
    21     if (i > 0)
    22     {
    23         vector<int> sequence_left(sequence.begin(), sequence.begin() + i);
    24         left = VerifySquenceOfBST(sequence_left);
    25     }
    26 
    27     bool right = true;
    28     if (i < len - 1)
    29     {
    30         vector<int> sequence_right(sequence.begin() + i, sequence.end() - 1);
    31         right = VerifySquenceOfBST(sequence_right);
    32     }
    33     return left && right;
    34 }
  • 相关阅读:
    使用RPC的接口创建账户同时购买内存并为其抵押CPU和NET资源
    使用RPC的接口创建账户
    【移动安全基础篇】——21、Android脱壳思路
    插件
    NGUI 优化
    影子
    优化文章索引
    MVC
    《你不常用的c#之XX》
    CMake
  • 原文地址:https://www.cnblogs.com/raichen/p/5650275.html
Copyright © 2011-2022 走看看