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 }
  • 相关阅读:
    JSP引擎的工作原理
    Hibernate缓存配置
    理解LinkedHashMap
    如何在CMD下运用管理员权限
    sun.misc.BASE64Encoder找不到jar包的解决方法
    访问WEB-INF目录中的JSP文件
    Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门
    message from server: "Host 'xxx' is not allowed to connect to this MySQL server的解决
    深入Java单例模式
    (八)路径(面包屑导航)分页标签和徽章组件
  • 原文地址:https://www.cnblogs.com/Laughing-Lz/p/5580659.html
Copyright © 2011-2022 走看看