從上到下,從左到右打印二叉樹:
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
本質(zhì)是要求廣搜债蓝,以
二叉樹示意圖
為例壳鹤,結(jié)果應(yīng)當是1,2,3,4,5
過程如下:
初始隊列【1】
1輸出,1的兩個兒子2和3加入饰迹;【2芳誓,3】
2出隊,2的兒子4加入啊鸭;【3锹淌,4】
3出隊,3的兒子5加入赠制;【4赂摆,5】
4出隊,5出隊钟些,結(jié)束烟号。
C++的隊列通常是用queue實現(xiàn);
vector<int> levelOrder(TreeNode* root) {
vector<int> res={};
if (root==NULL)
return res;
queue<TreeNode*>que;
que.push(root);
while(!que.empty()){
TreeNode* x=que.front();
if(x->left)
que.push(x->left);
if(x->right)
que.push(x->right);
res.push_back(x->val);
que.pop();
}
return res;
}
go語言的切片實現(xiàn)
func levelOrder(root *TreeNode) []int {
var res [] int
if (root==nil){
return res
}
que:= []*TreeNode{root}
cnt:=0
for(cnt<len(que)){
x:=que[cnt]
que[cnt]=nil
res=append(res,x.Val)
if(x.Left!=nil){
que=append(que,x.Left)
}
if(x.Right!=nil){
que=append(que,x.Right)
}
cnt++
}
return res
}
go語言的list容器實現(xiàn):
func levelOrder(root *TreeNode) []int {
var res [] int
if (root==nil){
return res
}
que:=list.New()
que.PushBack(root)
for(que.Len()!=0){
x:=que.Front().Value.(*TreeNode)
res=append(res,x.Val)
if(x.Left!=nil){
que.PushBack(x.Left)
}
if(x.Right!=nil){
que.PushBack(x.Right)
}
que.Remove(que.Front())
}
return res
}