一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹:對於任一結點,
所謂二叉搜尋樹的「映象」,即將所有結點的左右子樹對換位置後所得到的樹。
給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是對一棵二叉搜尋樹或其映象進行前序遍歷的結果。
輸入格式:
輸入的第一行給出正整數n(<=1000)。隨後一行給出n個整數鍵值,其間以空格分隔。
輸出格式:
如果輸入序列是對一棵二叉搜尋樹或其映象進行前序遍歷的結果,則首先在一行中輸出「yes」,然後在下一行輸出該樹後序遍歷的結果。數字間有1個空格,一行的首尾不得有多餘空格。若答案是否,則輸出「no」。
輸入樣例1:
7輸出樣例1:8 6 5 7 10 8 11
yes輸入樣例2:5 7 6 8 11 10 8
7輸出樣例2:8 10 11 8 6 7 5
yes輸入樣例3:11 8 10 7 5 6 8
7輸出樣例3:8 6 8 5 10 9 11
no
#include #include #include #include using namespace std;
int num[1005];
int tree[1005][2];
int fa,flag;
vectorv;
void insert(int &x, int y)
if (num[y] >=num[x])
else
}void postorder1(int a)
if (tree[a][0])
v.push_back(num[a]);
}void postorder2(int a)
if (tree[a][1])
v.push_back(num[a]);
}void preorder1(int a)
if (tree[a][1]&&flag)
if (tree[a][0]&&flag)
}void preorder2(int a)
if (tree[a][0]&&flag)
if (tree[a][1]&&flag)
}int main()
v.clear();
flag = 1;
if (num[2] >= num[1])
else
v.clear();
if (flag)
else
for (int i = 0; i < v.size(); i++)
} else
return 0;
}
這是二叉搜尋樹嗎?
一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹 對於任一結點,其左子樹中所有結點的鍵值小於該結點的鍵值 其右子樹中所有結點的鍵值大於等於該結點的鍵值 其左右子樹都是二叉搜尋樹。所謂二叉搜尋樹的 映象 即將所有結點的左右子樹對換位置後所得到的樹。給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是對...
天梯賽 這是二叉搜尋樹嗎?
l2 004 這是二叉搜尋樹嗎?25 分 一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹 對於任一結點,所謂二叉搜尋樹的 映象 即將所有結點的左右子樹對換位置後所得到的樹。給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是對一棵二叉搜尋樹或其映象進行前序遍歷的結果。輸入的第一行給出正整數 n 1...
這是二叉搜尋樹嗎?(二叉搜尋樹前序轉後序)
輸入樣例 1 78 6 5 7 10 8 11 輸出樣例 1 yes5 7 6 8 11 10 8 輸入樣例 2 78 10 11 8 6 7 5 輸出樣例 2 yes11 8 10 7 5 6 8 輸入樣例 3 78 6 8 5 10 9 11 輸出樣例 3 no include using na...