5-4 搜尋樹判斷 (25分)
對於二叉搜尋樹,我們規定任一結點的左子樹僅包含嚴格小於該結點的鍵值,而其右子樹包含大於或等於該結點的鍵值。如果我們交換每個節點的左子樹和右子樹,得到的樹叫做映象二叉搜尋樹。
現在我們給出乙個整數鍵值序列,請編寫程式判斷該序列是否為某棵二叉搜尋樹或某映象二叉搜尋樹的前序遍歷序列,如果是,則輸出對應二叉樹的後序遍歷序列。
輸入的第一行包含乙個正整數n(\le
≤1000),第二行包含n個整數,為給出的整數鍵值序列,數字間以空格分隔。
輸出的第一行首先給出判斷結果,如果輸入的序列是某棵二叉搜尋樹或某映象二叉搜尋樹的前序遍歷序列,則輸出yes
,否側輸出no
。如果判斷結果是yes
,下一行輸出對應二叉樹的後序遍歷序列。數字間以空格分隔,但行尾不能有多餘的空格。
7
8 6 5 7 10 8 11
yes
5 7 6 8 11 10 8
7
8 6 8 5 10 9 11
no
純c**~~~敬請享用;
就是映象的話先序遍歷就是根右左,後序遍歷就是右左根;
#include#include#includetypedef struct bst* bstree;
int temp[1010],temp_num,n;
struct bstbst;
void insert(bstree t,int data)
else
insert(t->left,data);
}else
else
insert(t->right,data);
}}int aa[1010];
int num_a;
void xianxu(bstree t)
}int bb[1010];
int num_b;
void houxu(bstree t)
}int cc[1010];
int num_c;
void houxu_ans(bstree t)
}void huoxu_ans_2(bstree t)
}int main()
{ scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&temp[i]);
bstree root;
root=(bstree)malloc(sizeof(bst));
root->left=null;
root->right=null;
root->weight=temp[1];
for(int i=2;i<=n;i++)
insert(root,temp[i]);
num_a=num_b=0;
xianxu(root);
houxu(root);
int flag=1;
for(int i=0;i
7 10 搜尋樹判斷 (25 分
對於二叉搜尋樹,我們規定任一結點的左子樹僅包含嚴格小於該結點的鍵值,而其右子樹包含大於或等於該結點的鍵值。如果我們交換每個節點的左子樹和右子樹,得到的樹叫做映象二叉搜尋樹。現在我們給出乙個整數鍵值序列,請編寫程式判斷該序列是否為某棵二叉搜尋樹或某映象二叉搜尋樹的前序遍歷序列,如果是,則輸出對應二叉樹...
7 28 搜尋樹判斷 25分
對於二叉搜尋樹,我們規定任一結點的左子樹僅包含嚴格小於該結點的鍵值,而其右子樹包含大於或等於該結點的鍵值。如果我們交換每個節點的左子樹和右子樹,得到的樹叫做映象二叉搜尋樹。現在我們給出乙個整數鍵值序列,請編寫程式判斷該序列是否為某棵二叉搜尋樹或某映象二叉搜尋樹的前序遍歷序列,如果是,則輸出對應二叉樹...
3 搜尋樹判斷 25分
對於二叉搜尋樹,我們規定任一結點的左子樹僅包含嚴格小於該結點的鍵值,而其右子樹包含大於或等於該結點的鍵值。如果我們交換每個節點的左子樹和右子樹,得到的樹叫做映象二叉搜尋樹。現在我們給出乙個整數鍵值序列,請編寫程式判斷該序列是否為某棵二叉搜尋樹或某映象二叉搜尋樹的前序遍歷序列,如果是,則輸出對應二叉樹...