LeetCode OJ--Binary Tree Level Order Traversal
http://oj.leetcode.com/problems/binary-tree-level-order-traversal/
树的层序遍历,使用队列
由于树不是满的,还要分出每一层来,刚开始给缺少的节点用dummy节点代替,结果超时了。
vector<vector<int> > levelOrder(TreeNode *root) {
        vector<vector<int> > ans;
        if(root == NULL)
            return ans;
        int num = ,num2 = ;
        queue<TreeNode *> myQueue;
        myQueue.push(root);
        TreeNode *nodeFront;
        TreeNode *dummy = new TreeNode(-);
        vector<int> onePiece;
        while(!myQueue.empty())
        {
            nodeFront = myQueue.front();
            myQueue.pop();
            num--;
            if(nodeFront != dummy)
            {
                onePiece.push_back(nodeFront->val);
                if(nodeFront->left)
                    myQueue.push(nodeFront->left);
                else
                    myQueue.push(dummy);
                if(nodeFront->right)
                    myQueue.push(nodeFront->right);
                else
                    myQueue.push(dummy);
            }
            else
            {
                myQueue.push(dummy);
                myQueue.push(dummy);
            }
            if(num == )
            {
                if(onePiece.empty())
                break;
                ans.push_back(onePiece);
                onePiece.clear();
                num2 = num2*;
                num = num2;
            }
        }
        return ans;
    }
改进的话,对缺失的节点进行计数,则计算出下一层应该有多少个节点来,如下。
    vector<vector<int> > levelOrder(TreeNode *root) {
        vector<vector<int> > ans;
        if(root == NULL)
            return ans;
        int num = ,num2 = ,nullNum = ,nullNumAcc = ;
        queue<TreeNode *> myQueue;
        myQueue.push(root);
        TreeNode *nodeFront;
        vector<int> onePiece;
        while(!myQueue.empty())
        {
            nodeFront = myQueue.front();
            myQueue.pop();
            num--;
            onePiece.push_back(nodeFront->val);
            if(nodeFront->left)
                myQueue.push(nodeFront->left);
            else
                nullNum++;
            if(nodeFront->right)
                myQueue.push(nodeFront->right);
            else
                nullNum++;
            if(num == )
            {
                if(onePiece.empty())
                    break;
                ans.push_back(onePiece);
                onePiece.clear();
                num2 = num2*;
                nullNumAcc = nullNumAcc* + nullNum;
                num = num2 - nullNumAcc;
                nullNum = ;
            }
        }
        return ans;
    }
LeetCode OJ--Binary Tree Level Order Traversal的更多相关文章
- Java for LeetCode 107 Binary Tree Level Order Traversal II
		Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ... 
- LeetCode 107 Binary Tree Level Order Traversal II(二叉树的层级顺序遍历2)(*)
		翻译 给定一个二叉树,返回从下往上遍历经过的每一个节点的值. 从左往右,从叶子到节点. 比如: 给定的二叉树是 {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7 返回它从下 ... 
- [LeetCode] 107. Binary Tree Level Order Traversal II 二叉树层序遍历 II
		Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ... 
- LeetCode(32)-Binary Tree Level Order Traversal
		题目: LeetCode Premium Subscription Problems Pick One Mock Articles Discuss Book fengsehng 102. Binary ... 
- [LeetCode] 102. Binary Tree Level Order Traversal 二叉树层序遍历
		Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ... 
- 【leetcode】Binary Tree Level Order Traversal I & II
		Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ... 
- LeetCode之Binary Tree Level Order Traversal  层序遍历二叉树
		Binary Tree Level Order Traversal 题目描述: Given a binary tree, return the level order traversal of its ... 
- (二叉树 BFS) leetcode 107. Binary Tree Level Order Traversal II
		Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ... 
- 【题解】【BT】【Leetcode】Binary Tree Level Order Traversal
		Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ... 
- leetcode 题解:Binary Tree Level Order Traversal (二叉树的层序遍历)
		题目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ri ... 
随机推荐
- python生成四位随机数
			有些时候需要发送短信给用户生成四位随机数字,这里在python中我们可以根据python自带的标准库random和string来实现. random下有三个可以随机取数的函数,分别是choice,ch ... 
- Docker DockerFile文件指令 & 构建
			1.dockerfile指令格式 # Comment注释 INSTRUCTION argument指令名 + 参数 2.普通指令 1. FROM 已存在的镜像,基础镜像,第一条非注释指令 FROM & ... 
- Eclipse使用Mybatis-Generator插件
			Mybatis-Generator插件极大地方便了我们的开发效率,不用每张表每个字段人工去敲,所以本文介绍使用Mybatis-Generator自动生成Dao.Model.Mapping相关文件 版权 ... 
- vim小操作
			初时,先有ed,ed为ex之父,ex为vi之父,而vi为vim之父 c 修改 d 删除 y 复制到寄存器 g~ 反转大小写 gu 反转为小写 gU 反转为大写 > 增加缩进 < 减小缩进 ... 
- verilog 1995 VS 2001 part1模块声明的扩展
			1.模块声明的扩展 (1)端口声明(input/output/inout)同数据类型声明(reg /wire)放在同一语句中. (2)ANSI C风格的端口声明可以用于module/task/func ... 
- Python基础:字符串(string)
			字符串的常用操作 字符串与数组一样,支持索引操作.切片与遍历 索引.切片操作: name = 'jason' name[0] 'j' name[1:3] 'as' 遍历: for char in na ... 
- Java-basic-7-面向对象
			继承 在Java中,每个子类只能有一个父类,但可以继承多个接口. 子类继承父类,类定义的时候用extends. 继承接口,用implements. 重写 声明为final的方法不能被重写. 声明为st ... 
- 深入理解FIFO(包含有FIFO深度的解释)——转载
			深入理解FIFO(包含有FIFO深度的解释) FIFO: 一.先入先出队列(First Input First Output,FIFO)这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行 ... 
- linux防火墙firewall使用简介
			1.firewalld的基本使用启动: systemctl start firewalld查看状态: systemctl status firewalld停止: systemctl disable f ... 
- 安装好的IIS,发布成功后打开网站出现错误
			开发web项目时需要安装IIS,在安装好IIS的Windows7本上发布asp.net网站时,web程序已经映射到了本地IIS上,但运行如下错误提示“处理程序“PageHandlerFactory ... 
