pat L2 004 這是二叉搜尋樹嗎?

2022-03-22 18:05:25 字數 1723 閱讀 1101

一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹:對於任一結點,

所謂二叉搜尋樹的「映象」,即將所有結點的左右子樹對換位置後所得到的樹。

給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是對一棵二叉搜尋樹或其映象進行前序遍歷的結果。

輸入格式:

輸入的第一行給出正整數n(<=1000)。隨後一行給出n個整數鍵值,其間以空格分隔。

輸出格式:

如果輸入序列是對一棵二叉搜尋樹或其映象進行前序遍歷的結果,則首先在一行中輸出「yes」,然後在下一行輸出該樹後序遍歷的結果。數字間有1個空格,一行的首尾不得有多餘空格。若答案是否,則輸出「no」。

輸入樣例1:

7

8 6 5 7 10 8 11

輸出樣例1:
yes

5 7 6 8 11 10 8

輸入樣例2:
7

8 10 11 8 6 7 5

輸出樣例2:
yes

11 8 10 7 5 6 8

輸入樣例3:
7

8 6 8 5 10 9 11

輸出樣例3:
no
思路:

純暴力,求出本身的先序,在求出翻轉的先序,比較,判斷就可以了。
注意點就是:

開闢的空間問題,要開闢兩個空間,因為本身需要乙個節點,翻轉需要乙個節點,(開闢乙個的話,位址塊只有乙個,指標會多次被改變,從而結果錯誤。)

**如下:

#include #include #include #include using namespace std;

struct node

};int flag,ff,nodenumber,treenode[1005];

void buildtree(node *head,node *temp)

buildtree(head->lchild,temp);

}else

buildtree(head->rchild,temp);

}return ;

}void buildtree_flip(node *head,node *temp)

buildtree_flip(head->lchild,temp);

}else

buildtree_flip(head->rchild,temp);

}return ;

}void preorder(node *head)

nodenumber++;

if(head->lchild != null)

preorder(head->lchild);

if(head->rchild != null)

preorder(head->rchild);

}int main()

///第一次與本身比較,判斷是不是

flag = 0;

nodenumber=0;

preorder(x1);

if(flag == 0)

else

else

}return 0;

}

PAT L2 004 這是二叉搜尋樹嗎?

題目 一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹 對於任一結點,所謂二叉搜尋樹的 映象 即將所有結點的左右子樹對換位置後所得到的樹。給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是對一棵二叉搜尋樹或其映象進行前序遍歷的結果。輸入格式 輸入的第一行給出正整數n 1000 隨後一行給出n個整數...

PAT L2 004 這是二叉搜尋樹嗎?

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹 對於任一結點,所謂二叉搜尋樹的 映象 即將所有結點的左右子樹對換位置後所得到的樹。給定乙個整數鍵值序列,現請你編寫程式,判斷這是否...

L2 004 這是二叉搜尋樹嗎?

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹 對於任一結點,所謂二叉搜尋樹的 映象 即將所有結點的左右子樹對換位置後所得到的樹。給定乙個整數鍵值序列,現請你編寫程式,判斷這是否...