二叉樹可以用於排序。其原理很簡單:對於乙個排序二叉樹新增新節點時,先與根節點比較,若小則交給左子樹繼續處理,否則交給右子樹。
當遇到空子樹時,則把該節點放入那個位置。
比如,10 8 5 7 12 4 的輸入順序,應該建成二叉樹如下圖所示,其中.表示空白。
...|-12
10-|
...|-8-|
.......|...|-7
.......|-5-|
...........|-4
本題目要求:根據已知的數字,建立排序二叉樹,並在標準輸出中橫向列印該二叉樹。
輸入格式
輸入資料為一行空格分開的n個整數。 n<100,每個數字不超過10000。
輸入資料中沒有重複的數字。
輸出格式
輸出該排序二叉樹的橫向表示。為了便於評卷程式比對空格的數目,請把空格用句點代替:
樣例輸入1
10 5 20
樣例輸出1
...|-20
10-|
...|-5
樣例輸入2
5 10 20 8 4 7
樣例輸出2
.......|-20
..|-10-|
..|....|-8-|
..|........|-7
5-|..|-4
這個題並沒有做出來,首先手打了乙個二叉搜尋樹,然後中序遍歷,遍歷的結果就是這個橫向列印的二叉樹的從下向上的值,如樣例中的:
5 10 20 8 4 7
中序遍歷的結果是:
4 5 7 8 10 20
也剛好是排序之後的結果。
在這裡我還有乙個問題沒有解決,那就是求每個節點的深度,或是每個深度都有哪些節點。這樣子的話,我們就能找到每個值在二叉樹中的具體位置(只要我們把這個樹看成乙個網格)
但是這個二叉樹的第乙個指標指向的不是根節點,而是最後乙個我們插入的值。最終也沒能算出每個節點的深度。
1 #include2 #include34view codeusing
namespace
std;56
struct
node;
1011
//插入
12 node* insert(node *p, int
x)13
20else25}
2627
//查詢
28int find(node* p, int x, int
dp)29 35
3637
38//
刪除39 node* remove(node *p, int
x)40
49else
if(p -> lc -> rc ==null)
55else
65return
p;66
} 67
68//
回憶一下整數快速冪
69int pow(int x, int
n)70
79return
ret;80}
8182
//中序遍歷
83int ret[109] = ;
84int num = 0;85
void inoder(node *b)
8693}94
95//
求節點的深度
96int find_deep(node *p, int x, int
dp)97
105}
106107
/*-----------------------------
*/108
//查詢某個節點的深度
109static
int depth=0
;110
void print_depth(node *p)
111120
out:
121 depth--;
122}
123/*
----------------------------
*/124
void level_sum_out(node *p, int
level)
129130
if(1==level)else
136} 137
138//
如何求出二叉樹的高度?
139int getheight(node *p)else
147} 148
/*----------------------------
*/149
intmain()
150
160//
cout<
//建立二叉搜尋樹
162 node *t =null;
163 s = "
" +s;
164//
反向迭代器可以避免考慮數的位數
165string
::reverse_iterator rite;
166int k = 0, num = 0
;167
for(rite = s.rbegin();rite!=s.rend();rite++)
174 num += (int(*rite)-'
0') * pow(10, k++);
175}
176//
接下來就是想辦法將它列印出來
177//
中序遍歷
178inoder(t);
179for(int i=1;i<=num;i++)
180 cout
181 cout<
;182
183//
cout<
185int y = find_deep(t, 4, 1
);186
//int y = find(t, 5, 1);
187 cout
188189
return0;
190 }
2019-02-20
08:32:26
藍橋杯 橫向列印二叉樹
讀入一棵二叉搜尋樹並橫向列印 樣例10 8 5 7 12 4 樣例輸出 列印的 其實是子節點和祖先節點的連線,如果在搜尋種能記錄節點自身一行最末尾的 使其子節點能夠列印與祖先節點的連線,就可以列印成樹,但子節點不是和所有祖先節點都有連線的,子節點和直接父親節點一定有連線。在例子中,搜尋過程 8 5 ...
二叉樹列印
舉例 1.初始化時,last 1,把1放入佇列 2.將1出隊,把1的子孩子2,3放入佇列,更新nlast 3 3.nlast更新完之後,列印上一次出隊的1,並和last比較,如果相同就列印換行,並更新last nlast 3 4.將2出隊,把2的子孩子4放入佇列,更新nlast 4 5,nlast更...
二叉樹列印
給定一顆二叉樹的頭節點head,請按照現在大家看到的這種格式列印 要求列印成 12 主要解決的問題是 如何換行 last 表示正在列印的當前行的最右節點 從左至右遍歷,如果遍歷到last節點,說明該換行了,換行之後,只需要nlast last,繼續下一行的列印過程,一直重複,直到所有的節點都列印完。...