剑指32-1

从上到下,从左到右打印二叉树:

 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };

本质是要求广搜,以


二叉树示意图

为例,结果应当是1,2,3,4,5
过程如下:
初始队列【1】
1输出,1的两个儿子2和3加入;【2,3】
2出队,2的儿子4加入;【3,4】
3出队,3的儿子5加入;【4,5】
4出队,5出队,结束。

C++的队列通常是用queue实现;

    vector levelOrder(TreeNode* root) {
        vector res={};
        if (root==NULL)
            return res;
        queueque;
        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语言的切片实现

func levelOrder(root *TreeNode) []int {
    var res [] int
    if (root==nil){
        return res
    }
    que:= []*TreeNode{root}
    cnt:=0
    for(cnt

go语言的list容器实现:

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
}

你可能感兴趣的:(剑指32-1)