欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

判斷整數(shù)序列是否為二元查找樹的后序遍歷結果的解決方法

 更新時間:2013年05月28日 17:06:18   作者:  
本篇文章是對判斷整數(shù)序列是否為二元查找樹的后序遍歷結果的解決方法進行了詳細的分析介紹,需要的朋友參考下
題目:輸入一個整數(shù)數(shù)組,判斷該數(shù)組是不是某二元查找樹的后序遍歷的結果。
如果是返回true,否則返回false。
例如輸入5、7、6、9、11、10、8,由于這一整數(shù)序列是如下樹的后序遍歷結果.
      8
     / \
   6   10
  / \    / \
  5  7 9 11
因此返回true。
如果輸入7、4、6、5,沒有哪棵樹的后序遍歷的結果是這個序列,因此返回false。
本題網上已經有用遞歸單純判斷的解法.
個人解法: 先得到序列對應的中序序列, 然后看中序序列是否從小到大有序, 得出判斷.
相比:時間復雜度相同, 增加N的空間, 但可求得對應的中序序列.
以下為代碼:
復制代碼 代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 100
int seq[LEN + 1] = {0};
int *mid = NULL;
int pos = 1;
void getmid(int start, int end);
int check(int num);
int main()
{
 int val;
 int num;
 int ret;
 int i;
 printf("input the sequence, end it with '-9999': ");

 num = 1;
 scanf("%d", &val);
 while(val != -9999)
 {
  seq[num] = val;
  num ++;
  scanf("%d", &val);
 }
 num--;
 mid = (int *)malloc((num + 1) * sizeof(int));
 if(mid == NULL)
 {
  printf("malloc failed.\n");
  exit(1);
 }
 memset(mid, 0, num + 1);
 getmid(1, num);

 printf("mid: ");
 for(i = 1; i< num +1; i++)
 {
  printf("%d ", mid[i]);
 }
 printf("\n");
 ret = check(num);
 if(ret == -1)
 {
  printf("no.\n");
 }
 else
 {
  printf("yes\n");
 }
 return 0;
}/* main() */
void getmid(int start, int end)
{
 int flag;
 if(start > end)
 {
  return;
 }
 if(start == end)
 {
  mid[pos] = seq[end];
  pos ++;
  return;
 }
 int par;
 par = start;
 flag = 0;
 while(par < end)
 {
  if(seq[par] > seq[end])
  {
   flag = 1;
   getmid(start, par - 1);
   mid[pos] = seq[end];
   pos ++;   
   getmid(par, end - 1);
   break;
  }
  par ++;
 }
 if(!flag)
 {
  getmid(start, end-1);
  mid[pos] = seq[end];
  pos ++;
 }
}/* getmid */
int check(int num)
{
 int i;

 for(i = 1; i < num; i++)
 {
  if(mid[i] > mid[i+1])
  {
   return -1;
  }
 }
 return 0;
}/* check() */

相關文章

  • VSCode插件開發(fā)全攻略之跳轉到定義、自動補全、懸停提示功能

    VSCode插件開發(fā)全攻略之跳轉到定義、自動補全、懸停提示功能

    這篇文章主要介紹了VSCode插件開發(fā)全攻略之跳轉到定義、自動補全、懸停提示,需要的朋友可以參考下
    2020-05-05
  • C++實現(xiàn)LeetCode(42.收集雨水)

    C++實現(xiàn)LeetCode(42.收集雨水)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(42.收集雨水),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • 關于C++中虛擬繼承的一些總結分析

    關于C++中虛擬繼承的一些總結分析

    虛擬繼承在一般的應用中很少用到,所以也往往被忽視,這也主要是因為在C++中,多重繼承是不推薦的,也并不常用
    2013-09-09
  • C++ 中隨機函數(shù)random函數(shù)的使用方法

    C++ 中隨機函數(shù)random函數(shù)的使用方法

    這篇文章主要介紹了C++ 中隨機函數(shù)random函數(shù)的使用方法的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • MFC LoadImage用法案例詳解

    MFC LoadImage用法案例詳解

    這篇文章主要介紹了MFC LoadImage用法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • linux之sed命令的用法

    linux之sed命令的用法

    sed是一個很好的文件處理工具,本身是一個管道命令,主要是以行為單位進行處理,可以將數(shù)據(jù)行進行替換、刪除、新增、選取等特定工作,下面先了解一下sed的用法
    2013-10-10
  • 基于c++中的默認拷貝函數(shù)的使用詳解

    基于c++中的默認拷貝函數(shù)的使用詳解

    本篇文章對c++中默認拷貝函數(shù)的使用進行了詳細的分析介紹。需要的朋友參考下
    2013-05-05
  • C語言之malloc動態(tài)分配內存和free釋放

    C語言之malloc動態(tài)分配內存和free釋放

    這篇文章主要介紹了C語言之malloc動態(tài)分配內存和free釋放,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C++實現(xiàn)LeetCode(63.不同的路徑之二)

    C++實現(xiàn)LeetCode(63.不同的路徑之二)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(63.不同的路徑之二),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C語言中隊列的結構和函數(shù)接口的使用示例

    C語言中隊列的結構和函數(shù)接口的使用示例

    隊列只允許一端進行插入數(shù)據(jù)操作,在另一端進行刪除數(shù)據(jù)操作的特殊線性表,隊列具有先進先出FIFO的性質;隊列可用數(shù)組和鏈表 的方法實現(xiàn),使用鏈表的結構實現(xiàn)更優(yōu)一些,因為如果使用數(shù)組節(jié),出隊列時刪去首元素需要將整個數(shù)組前移,效率比較低
    2023-02-02

最新評論