程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 二叉搜索樹的後序遍歷序列,二叉

二叉搜索樹的後序遍歷序列,二叉

編輯:C++入門知識

二叉搜索樹的後序遍歷序列,二叉


題目:輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。

思路:需要遍歷樹,二叉排序樹的特點是 lchild.key < root.key < rchild.key

那麼我們使用分治思想,先利用上面特點將左右子樹分開,遇到第一個大於root.key的之後(右邊)就是右子樹,那麼當我們在遍歷右子樹的時候如果遇到小於root.key的情況,那麼就是錯誤的序列。

  1 #include "stdafx.h"
  2 #include<stdio.h>
  3 
  4 
  5 // BST:Binary Search Tree,二叉搜索樹
  6 bool VerifySquenceOfBST(int sequence[], int length)
  7 {
  8     if(sequence == NULL || length <= 0)
  9         return false;
 10         
 11     int root = sequence[length - 1];
 12     
 13     // 在二叉搜索樹中左子樹的結點小於根結點
 14     int i = 0;
 15     for(; i < length - 1; ++i)
 16     {
 17         if(sequence[i] > root)
 18             break;
 19     }
 20     
 21     // 在二叉搜索樹中右子樹的結點大於根結點
 22     int j = i ;
 23     for(; j < length - 1; ++j)
 24     {
 25         if(sequence[j] < root)
 26             return false;
 27     }
 28     
 29     // 判斷左子樹是不是二叉搜索樹
 30     bool left = true;
 31     if(i > 0)
 32         left = VerifySquenceOfBST(sequence, i);
 33     
 34     // 判斷右子樹是不是二叉搜索樹
 35     bool right = true;
 36     if(i < length - 1)
 37         right = VerifySquenceOfBST(sequence + i , length - i - 1) ;
 38         
 39     return (left && right);
 40 }
 41 
 42 
 43 int main()
 44 {
 45     
 46 //test1    
 47 //            10
 48 //         /      \
 49 //        6        14
 50 //       /\        /\
 51 //      4  8     12  16
 52     int data1[] = {4, 8, 6, 12, 16, 14, 10};
 53     int length1 = sizeof(data1) / sizeof(int);
 54     printf("test1:  ");
 55     if(VerifySquenceOfBST(data1, length1))
 56         printf("Yes\n");
 57     else
 58         printf("No\n");
 59     
 60 //test2    
 61 //               5
 62 //              /
 63 //             4
 64 //            /
 65 //           3
 66 //          /
 67 //         2
 68 //        /
 69 //       1
 70     
 71     int data2[] = {5, 4, 3, 2, 1};
 72     int length2 = sizeof(data2)/sizeof(int);
 73     printf("test2:  ");
 74     if(VerifySquenceOfBST(data2, length2))
 75         printf("Yes\n");
 76     else
 77         printf("No\n");
 78 
 79 //test3    
 80 //           5
 81 //          / \
 82 //         4   7
 83 //            /
 84 //           6
 85 
 86     int data3[] = {4, 6, 7, 5};
 87     int length3 = sizeof(data3)/sizeof(int);
 88     printf("test3:  ");
 89     if(VerifySquenceOfBST(data3, length3))
 90         printf("Yes\n");
 91     else
 92         printf("No\n");
 93     
 94 //test4
 95 // NULL
 96 
 97     printf("test4:  ");
 98     if(VerifySquenceOfBST(NULL, 0))
 99         printf("Yes\n");
100     else
101         printf("No\n");
102     
103     return 0;
104 }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved