通過先序方式建立樹,通過簡單的遞迴就可以實現先序,中序,後序遍歷。
層次遍歷還需要用到佇列,當某個節點出隊時,它的左右結點要入隊(如果有的話)。
#include
#include
using
namespace std;
typedef
struct node
node;
//通過先序方式建立樹,#表示空
/* a
b c
d e f #
# # # # # #
應輸入:abd##e##cf###
前序遍歷:abdecf
中序遍歷:dbeafc
後序遍歷:debfca
層次遍歷:abcdef
*/void
creattree
(node*
&root)
}//列印乙個節點的資料
void
visit
(node* node)
//遞迴-前序遍歷,根左右
void
preorder
(node* root)
}//遞迴-中序遍歷,左根右
void
inorder
(node* root)
}//遞迴-後序遍歷,左右根
void
postorder
(node* root)
}//層次遍歷
void
layerorder
(node* root)
}int
main()
執行結果:
abd##e##cf###
前序遍歷:abdecf
中序遍歷:dbeafc
後序遍歷:debfca
層次遍歷:abcdef
氷鳶鳶鳶
2020.7.15
樹 先序中序後序遍歷
題目分析 題目描述 description 求一棵二叉樹的前序遍歷,中序遍歷和後序遍歷 輸入描述 input description 第一行乙個整數n,表示這棵樹的節點個數。接下來n行每行2個整數l和r。第i行的兩個整數li和ri代表編號為i的節點的左兒子編號和右兒子編號。輸出描述 output d...
樹的遍歷 先序遍歷 中序遍歷 後序遍歷
名詞解釋 1 每個元素稱為節點 2 有乙個特定的節點被稱為根節點或樹根 3 除根節點外的其餘資料元素被分為m個互不相交的集合t1,t2,t3.tm 1,其中每乙個集合ti本身也是乙個樹,被稱作原樹的子樹 節點的度 乙個節點含有子樹的個數稱為該節點的度 葉節點或終端節點 度為0的節點稱為葉節點 非終端...
樹的先序 中序 推後序, 後序 中序 推先序
根據中序遍歷 先序遍歷構建 輸出後序遍歷 後序遍歷為左右根 遞迴的返回條件中序遍歷中 左子樹和右子樹 過i將中序遍歷中的樹分為左子樹和右子樹 i為中序遍歷的根節點 需要輸出的結點 每棵樹都是自己 的根結點 2.確定左子樹的start,與 end範圍,同時通過先序陣列找到此時的根節點 上乙個根結點 1...