5 28 搜尋樹判斷

2021-08-06 05:53:20 字數 1203 閱讀 4952

5-28 搜尋樹判斷 (25分)

對於二叉搜尋樹,我們規定任一結點的左子樹僅包含嚴格小於該結點的鍵值,而其右子樹包含大於或等於該結點的鍵值。如果我們交換每個節點的左子樹和右子樹,得到的樹叫做映象二叉搜尋樹。

現在我們給出乙個整數鍵值序列,請編寫程式判斷該序列是否為某棵二叉搜尋樹或某映象二叉搜尋樹的前序遍歷序列,如果是,則輸出對應二叉樹的後序遍歷序列。

輸入格式:

輸入的第一行包含乙個正整數n(\le≤1000),第二行包含n個整數,為給出的整數鍵值序列,數字間以空格分隔。

輸出格式:

輸出的第一行首先給出判斷結果,如果輸入的序列是某棵二叉搜尋樹或某映象二叉搜尋樹的前序遍歷序列,則輸出yes,否側輸出no。如果判斷結果是yes,下一行輸出對應二叉樹的後序遍歷序列。數字間以空格分隔,但行尾不能有多餘的空格。

輸入樣例1:

7 8 6 5 7 10 8 11

輸出樣例1:

yes

5 7 6 8 11 10 8

輸入樣例2:

7 8 6 8 5 10 9 11

輸出樣例2:

no

#include 

#include

#include

struct node

;int pre[12121], que1[12121], que2[12121];

int flag1;

int top1, top2;

struct node * creat(struct node * bt, int k)//建樹

else

if(kdata)//左插

bt->left = creat(bt->left, k);

else

//右插

bt->right = creat(bt->right, k);

return bt;

};void swap(struct node * bt)//交換樹的左右結點

void preprint(struct node * bt)//先序遍歷

}void postprint(struct node * bt)//後序遍歷

}int main()

}if(flag1)//如果不是非映象的}}

if(flag1==2)//兩者都不可以,no

else

}return

0;}

5 28 搜尋樹判斷

void swap bintree bst 二叉樹左右子樹互換 void postorder bintree bst,stack s 後序遍歷,壓入堆疊s中 int main preorder t,s1 flag 1 for i 0 i 比較建立的搜尋二叉樹先序遍歷序列和給出的序列是否一致 if 1...

PAT判斷搜尋樹

解題思路,題目給出一行數字判斷是否為二叉搜尋樹或者二叉映象樹 那麼我們可以根據這行數字建立二叉乙個二叉搜尋樹和乙個二叉映象 樹。然後求出它們的前序,判斷是二叉搜尋樹還是二叉映象樹,因為 前序序列一定和給出的數字一樣所以很好判斷。判斷之後,求出後序 的表示式,然後輸出之就ok了 include inc...

7 28 搜尋樹判斷

7 28 搜尋樹判斷 25 分 對於二叉搜尋樹,我們規定任一結點的左子樹僅包含嚴格小於該結點的鍵值,而其右子樹包含大於或等於該結點的鍵值。如果我們交換每個節點的左子樹和右子樹,得到的樹叫做映象二叉搜尋樹。現在我們給出乙個整數鍵值序列,請編寫程式判斷該序列是否為某棵二叉搜尋樹或某映象二叉搜尋樹的前序遍...