解題思路,題目給出一行數字判斷是否為二叉搜尋樹或者二叉映象樹
那麼我們可以根據這行數字建立二叉乙個二叉搜尋樹和乙個二叉映象
樹。然後求出它們的前序,判斷是二叉搜尋樹還是二叉映象樹,因為
前序序列一定和給出的數字一樣所以很好判斷。判斷之後,求出後序
的表示式,然後輸出之就ok了
#include #include #include #define max 1005
using namespace std;
struct bitnode;
int arr[max];
int preorderimg[max];
int preorder[max];
int postorder[max];
int index_post;
//插入節點
void inserttree(bitnode* &root, int data ,bool isimg)elseelse
}elseelse}}
}void creattree(bitnode* &root, int n, bool isimag)
}//求出前序
void creatpreorder(bitnode* root, bool isimg)
if(isimg)else
if(root->left)
if(root->right)
}//求出後序
void creatpostorder(bitnode* root )
if(root->left)
if(root->right)
postorder[index_post++] = root->data;
}bool checknum(int a , int b,int len)
}return true;
}void printtree(int len)
//建立二叉樹搜尋樹和二叉映象樹
creattree(rootimg, n, true);
creattree(root, n, false);
creatpreorder(root, false);
//求出二叉搜尋樹的前序
index_post = 0;
//判斷是否為二叉搜尋樹
if(checknum(arr,preorder, n)){
cout<<"yes"<
PAT 7 28 搜尋樹判斷 二叉搜尋樹
題目描述 對於二叉搜尋樹,我們規定任一結點的左子樹僅包含嚴格小於該結點的鍵值,而其右子樹包含大於或等於該結點的鍵值。如果我們交換每個節點的左子樹和右子樹,得到的樹叫做映象二叉搜尋樹。現在我們給出乙個整數鍵值序列,請編寫程式判斷該序列是否為某棵二叉搜尋樹或某映象二叉搜尋樹的前序遍歷序列,如果是,則輸出...
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...
5 28 搜尋樹判斷
5 28 搜尋樹判斷 25分 對於二叉搜尋樹,我們規定任一結點的左子樹僅包含嚴格小於該結點的鍵值,而其右子樹包含大於或等於該結點的鍵值。如果我們交換每個節點的左子樹和右子樹,得到的樹叫做映象二叉搜尋樹。現在我們給出乙個整數鍵值序列,請編寫程式判斷該序列是否為某棵二叉搜尋樹或某映象二叉搜尋樹的前序遍歷...