將一系列給定數字順序插入乙個初始為空的二叉搜尋樹(定義為左子樹鍵值大,右子樹鍵值小),你需要判斷最後的樹是否一棵完全二叉樹,並且給出其層序遍歷的結果。
輸入格式:
輸入第一行給出乙個不超過20的正整數n;第二行給出n個互不相同的正整數,其間以空格分隔。
輸出格式:
將輸入的n個正整數順序插入乙個初始為空的二叉搜尋樹。在第一行中輸出結果樹的層序遍歷結果,數字間以1個空格分隔,行的首尾不得有多餘空格。第二行輸出yes,如果該樹是完全二叉樹;否則輸出no。
輸入樣例1:
9
3845
4224
5830
6712
51
輸出樣例1:
38
4524
5842
3012
6751
yes
輸入樣例2:
8
3824
1245
5867
4251
輸出樣例2:
38
4524
5842
1267
51no
拋磚引玉:
本題的核心步驟大概分為三步:
*如何構建乙個二叉搜尋樹
*如何通過層序遍歷輸出一棵二叉搜尋樹
*如何檢查二叉搜尋樹是否為一棵完全二叉樹
對於第一步與第二步為二叉樹的基本操作,對著下面的**自己敲一遍應該就能略知一二。
對於第三步延續了層序遍歷的思想,要設法知道什麼時候遍歷到最後一層,我的想法是引入乙個count計數板,每次出隊count+1,當入隊的元素為null時,立刻結束入隊,然後把佇列排空,當排空佇列時一直保持計數。因為最後一次進隊的元素為null所以count在最後需要-1.最後將count和n進行比較即可。
可能有錯,僅供參考:
#include
#include
using
namespace std;
struct node
;node *
insert
(int a,node *root)
else
if(a>root-
>data)
}return root;
}int flag=0;
void
cengxubianli
(node *root)
else
b[in++
]=b[out]
->left;
b[in++
]=b[out]
->right;
} out++;}
}void
judge
(node *root,
int n)
else
if(front-
>right!=
null
)else
a.pop();
count++;}
while
(!a.
empty()
) count--;if
(countelse
if(count==n)
}int
main()
for(
inti(0
);i)cengxubianli
(root)
;judge
(root, n)
;}
work hard, stay humble. 是否完全二叉搜尋樹 30分
時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 將一系列給定數字順序插入乙個初始為空的二叉搜尋樹 定義為左子樹鍵值大,右子樹鍵值小 你需要判斷最後的樹是否一棵完全二叉樹,並且給出其層序遍歷的結果。輸入格式 輸入第一行給出乙個不超過...
5 13 是否完全二叉搜尋樹 30分
5 13 是否完全二叉搜尋樹 30分 將一系列給定數字順序插入乙個初始為空的二叉搜尋樹 定義為左子樹鍵值大,右子樹鍵值小 你需要判斷最後的樹是否一棵完全二叉樹,並且給出其層序遍歷的結果。輸入第一行給出乙個不超過20的正整數n 第二行給出n個互不相同的正整數,其間以空格分隔。將輸入的n個正整數順序插入...
7 2 是否完全二叉搜尋樹 (30 分)
將一系列給定數字順序插入乙個初始為空的二叉搜尋樹 定義為左子樹鍵值大,右子樹鍵值小 你需要判斷最後的樹是否一棵完全二叉樹,並且給出其層序遍歷的結果。輸入第一行給出乙個不超過20的正整數n 第二行給出n個互不相同的正整數,其間以空格分隔。將輸入的n個正整數順序插入乙個初始為空的二叉搜尋樹。在第一行中輸...