}void swap(bintree bst)//二叉樹左右子樹互換
void postorder(bintree bst,stack s)//後序遍歷,壓入堆疊s中
}int main()
preorder(t,s1);
flag=1;
for(i=0;i//比較建立的搜尋二叉樹先序遍歷序列和給出的序列是否一致
}if(1==flag)
else
}if(1==flag)
else
printf("no\n");
}return
0;}
#include
#include
#define max 1000
typedef
int elemtype;
typedef
struct node *bintree;
struct node
;typedef
struct snode
*stack;
void push(stack s,elemtype x)
elemtype pop(stack s)
stack initial()
bintree recover(elemtype pre,elemtype in,int len,int *tag)//由先序和中序遍歷序列建立二叉樹,當序列不一致時,tag標記位1,無法建立二叉樹
}if(0==flag)
t->lchild=recover(pre+1,in,i,tag);
t->rchild=recover(pre+1+i,in+i+1,len-i-1,tag);
}return t;
}bintree recover2(elemtype pre,elemtype in,int len,int *tag)
}if(0==flag)
t->lchild=recover2(pre+1,in,i,tag);
t->rchild=recover2(pre+1+i,in+i+1,len-i-1,tag);
}return t;
}stack postorder(bintree t,stack s)
return s;
}int compare1(int *a,int *b)
int compare2(int *a,int *b)
int main()
tag1=0;
qsort(inorder1,n,sizeof(int),compare1);//搜尋二叉樹的中序遍歷序列
tree1=recover(preorder,inorder1,n,&tag1);
if(0==tag1)
tag2=0;
qsort(inorder2,n,sizeof(int),compare2);
tree2=recover2(preorder,inorder2,n,&tag2);
if(0==tag2)
if(0!=tag1&&0!=tag2)
printf("no\n");
return
0;}
5 28 搜尋樹判斷
5 28 搜尋樹判斷 25分 對於二叉搜尋樹,我們規定任一結點的左子樹僅包含嚴格小於該結點的鍵值,而其右子樹包含大於或等於該結點的鍵值。如果我們交換每個節點的左子樹和右子樹,得到的樹叫做映象二叉搜尋樹。現在我們給出乙個整數鍵值序列,請編寫程式判斷該序列是否為某棵二叉搜尋樹或某映象二叉搜尋樹的前序遍歷...
PAT判斷搜尋樹
解題思路,題目給出一行數字判斷是否為二叉搜尋樹或者二叉映象樹 那麼我們可以根據這行數字建立二叉乙個二叉搜尋樹和乙個二叉映象 樹。然後求出它們的前序,判斷是二叉搜尋樹還是二叉映象樹,因為 前序序列一定和給出的數字一樣所以很好判斷。判斷之後,求出後序 的表示式,然後輸出之就ok了 include inc...
7 28 搜尋樹判斷
7 28 搜尋樹判斷 25 分 對於二叉搜尋樹,我們規定任一結點的左子樹僅包含嚴格小於該結點的鍵值,而其右子樹包含大於或等於該結點的鍵值。如果我們交換每個節點的左子樹和右子樹,得到的樹叫做映象二叉搜尋樹。現在我們給出乙個整數鍵值序列,請編寫程式判斷該序列是否為某棵二叉搜尋樹或某映象二叉搜尋樹的前序遍...