zoukankan      html  css  js  c++  java
  • JZ-C-24

    剑指offer第二十四题:二叉搜索树的后序遍历序列

      1 //============================================================================
      2 // Name        : JZ-C-24.cpp
      3 // Author      : Laughing_Lz
      4 // Version     :
      5 // Copyright   : All Right Reserved
      6 // Description : 二叉搜索树的后序遍历序列
      7 //============================================================================
      8 
      9 #include <iostream>
     10 #include <stdio.h>
     11 using namespace std;
     12 
     13 // BST:Binary Search Tree,二叉搜索树
     14 bool VerifySquenceOfBST(int sequence[], int length) {
     15     if (sequence == NULL || length <= 0) {
     16         return false;
     17     }
     18     int root = sequence[length - 1]; //后序遍历序列的最后一位为二叉搜索树的根结点
     19     // 在二叉搜索树中左子树的结点小于根结点
     20     int i = 0;
     21     for (; i < length - 1; i++) {
     22         if (sequence[i] > root) {
     23             break;
     24         }
     25     }
     26     // 在二叉搜索树中右子树的结点大于根结点
     27     int j = i;
     28     for (; j < length - 1; j++) {
     29         if (sequence[j] < root) {
     30             return false;
     31         }
     32     }
     33     // 递归判断左子树是不是二叉搜索树
     34     bool left = true;
     35     if (i > 0) {
     36         left = VerifySquenceOfBST(sequence, i);//结合长度i可只遍历数组中的左子树
     37     }
     38     // 递归判断右子树是不是二叉搜索树
     39     bool right = true;
     40     if (i < length- 1) {
     41         right = VerifySquenceOfBST(sequence+i,length-i-1);//sequence+i结合长度length-i-1可只遍历数组中的右子树★
     42     }
     43     return left&&right;
     44 
     45 }
     46 
     47 // ====================测试代码====================
     48 void Test(char* testName, int sequence[], int length, bool expected)
     49 {
     50     if(testName != NULL)
     51         printf("%s begins: ", testName);
     52 
     53     if(VerifySquenceOfBST(sequence, length) == expected)
     54         printf("passed.
    ");
     55     else
     56         printf("failed.
    ");
     57 }
     58 
     59 //            10
     60 //         /      
     61 //        6        14
     62 //       /        /
     63 //      4  8     12  16
     64 void Test1()
     65 {
     66     int data[] = {4, 8, 6, 12, 16, 14, 10};
     67     Test("Test1", data, sizeof(data)/sizeof(int), true);
     68 }
     69 
     70 //           5
     71 //          / 
     72 //         4   7
     73 //            /
     74 //           6
     75 void Test2()
     76 {
     77     int data[] = {4, 6, 7, 5};
     78     Test("Test2", data, sizeof(data)/sizeof(int), true);
     79 }
     80 
     81 //               5
     82 //              /
     83 //             4
     84 //            /
     85 //           3
     86 //          /
     87 //         2
     88 //        /
     89 //       1
     90 void Test3()
     91 {
     92     int data[] = {1, 2, 3, 4, 5};
     93     Test("Test3", data, sizeof(data)/sizeof(int), true);
     94 }
     95 
     96 // 1
     97 //  
     98 //   2
     99 //    
    100 //     3
    101 //      
    102 //       4
    103 //        
    104 //         5
    105 void Test4()
    106 {
    107     int data[] = {5, 4, 3, 2, 1};
    108     Test("Test4", data, sizeof(data)/sizeof(int), true);
    109 }
    110 
    111 // 树中只有1个结点
    112 void Test5()
    113 {
    114     int data[] = {5};
    115     Test("Test5", data, sizeof(data)/sizeof(int), true);
    116 }
    117 
    118 void Test6()
    119 {
    120     int data[] = {7, 4, 6, 5};
    121     Test("Test6", data, sizeof(data)/sizeof(int), false);
    122 }
    123 
    124 void Test7()
    125 {
    126     int data[] = {4, 6, 12, 8, 16, 14, 10};
    127     Test("Test7", data, sizeof(data)/sizeof(int), false);
    128 }
    129 
    130 void Test8()
    131 {
    132     Test("Test8", NULL, 0, false);
    133 }
    134 
    135 int main(int argc, char** argv)
    136 {
    137     Test1();
    138     Test2();
    139     Test3();
    140     Test4();
    141     Test5();
    142     Test6();
    143     Test7();
    144     Test8();
    145 
    146     return 0;
    147 }
  • 相关阅读:
    sublime开启vim模式
    git命令行界面
    搬进Github
    【POJ 2886】Who Gets the Most Candies?
    【UVA 1451】Average
    【CodeForces 625A】Guest From the Past
    【ZOJ 3480】Duck Typing
    【POJ 3320】Jessica's Reading Problemc(尺取法)
    【HDU 1445】Ride to School
    【HDU 5578】Friendship of Frog
  • 原文地址:https://www.cnblogs.com/Laughing-Lz/p/5580659.html
Copyright © 2011-2022 走看看