第三題:二叉樹遍歷
問題定義
輸入一棵二叉樹,輸出樹的前、中、後序遍歷結果。
輸入乙個整數n(n<= 10000),表示樹中有n個結點(編號0~n-1)。
接下來n行,依次為結點0~結點n-1的左右孩子情況。
每行3個整數,f,l,r。l,r為f的左右孩子。l,r如果為-1表示該位置上沒有孩子。
分三行分別輸出樹的前中後序遍歷。
同一行中的數字,用乙個空格間隔。
輸入樣例
50 3 1
1 2 -1
2 -1 4
3 -1 -1
4 -1 -1
輸出樣例
0 3 1 2 4
3 0 2 4 1
3 4 2 1 0
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int max =
10010
;typedef
struct bitnode
bitnode,
*bitree;
bitree node[max]
;int n, f, l, r, root =
0, flag =0;
void
preorder
(bitree t)
void
inorder
(bitree t)
void
postorder
(bitree t)
intmain()
for(
int i=
0; i(r !=-1
)}while
(root < n &&
!node[root]
->is_root) root++
;preorder
(node[root]);
flag =0;
printf
("\n");
inorder
(node[root]);
flag =0;
printf
("\n");
postorder
(node[root]);
return0;
}
機試書 二叉樹遍歷
最開始一直想著在字串上 換順序 導致思路很不清晰。其實,就活學活用已經掌握的方法 根據前序和中序遍歷結果來構造二叉樹!構造二叉樹之後,再對其進行後序遍歷 遞迴的方法 要注意的點 題目說輸入 字串 但是其實一般來說,為了程式設計的方便,可以定義char陣列來儲存字串並進行操作,用法如下 char a ...
王道機試指南 二叉樹與二叉搜尋樹
二叉樹題目鏈結二叉樹 題意 在乙個完全二叉樹中給出乙個子樹的根和樹的最後乙個結點,求其子樹的結點個數。思路 分為三種情況 其中2 3情況均為乙個滿二叉樹,只需要知道其子樹的深度就可以直接算得,而對於第一種情況,需要先計算出其最後一層的結點樹,再加上以上的結點數。如下 include include ...
構建二叉樹 遍歷二叉樹
陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...