剑指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<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语言的切片实现

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容器实现:

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
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 不要使用暴力的方法,可以学学讨论里的技巧 二维数组中的查找 题目:在一个二维数组中(每个一维数组的长度相同),每一...
    大大大大大大大熊阅读 2,572评论 0 1
  • 二维数组中的查找 Q: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按...
    菜鸡不得行阅读 3,063评论 0 2
  • 开个新坑,准备校招研发岗面试,基本的算法还是要过关的。 写在前面 本系列包含《剑指Offer》66道算法题,预计一...
    机盐Johnny阅读 4,958评论 0 12
  • 1.二维数组的查找 题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一...
    少年梦游计_3403阅读 1,175评论 0 1
  • 1. 二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,...
    deactivateuser阅读 1,654评论 0 3