35. Binary Tree Level Order Traversal && Binary Tree Level Order Traversal II
Binary Tree Level Order Traversal
OJ: https://oj.leetcode.com/problems/binary-tree-level-order-traversal/
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example: Given binary tree {3,9,20,#,#,15,7}
,
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
思想: 若递归,传入层号。若迭代,使用队列,在每层结束时,加入一个标记。
方法一:递归:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
void levelPath(TreeNode* root, int level, vector<vector<int> > &path) {
if(root == NULL) return;
level < path.size() ? path[level].push_back(root->val) : path.push_back(vector<int>(1, root->val));
levelPath(root->left, level+1, path);
levelPath(root->right, level+1, path);
}
class Solution {
public:
vector<vector<int> > levelOrder(TreeNode *root) {
vector<vector<int> > path;
levelPath(root, 0, path);
return path;
}
};
方法二:迭代
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int> > levelOrder(TreeNode *root) {
vector<vector<int> > vec;
if(root == NULL) return vec;
queue<TreeNode*> qu;
qu.push(root);
qu.push(0);
vector<int> vec2;
while(!qu.empty()) {
TreeNode *p = qu.front();
qu.pop();
if(!p) {
if(vec2.size()) { vec.push_back(vec2); vec2.clear();}
if(!qu.empty()) qu.push(0);
}else {
vec2.push_back(p->val);
if(p->left) qu.push(p->left);
if(p->right) qu.push(p->right);
}
}
return vec;
}
};
Binary Tree Level Order Traversal II
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example: Given binary tree {3,9,20,#,#,15,7}
,
3
/ \
9 20
/ \
15 7
return its bottom-up level order traversal as:
[
[15,7],
[9,20],
[3]
]
思想: 目前用两种方法:1 同上,最后将结果反转一下。 2.先求出最大层数,再层序遍历。(也许还有更好的方法)
1.
void levelPath(TreeNode* root, int level, vector<vector<int> > &path) {
if(root == NULL) return;
level < path.size() ? path[level].push_back(root->val) : path.push_back(vector<int>(1, root->val));
levelPath(root->left, level+1, path);
levelPath(root->right, level+1, path);
}
class Solution {
public:
vector<vector<int> > levelOrderBottom(TreeNode *root) {
vector<vector<int> > path;
levelPath(root, 0, path);
return vector<vector<int> > (path.rbegin(), path.rend());
}
};
2.
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
int getLevel(TreeNode *root) {
if(root == NULL) return -1;
return max(getLevel(root->left), getLevel(root->right)) + 1;
}
void getLevel2(TreeNode *root, int curL, vector<vector<int> > &vec) {
if(root == NULL) return;
vec[curL].push_back(root->val);
getLevelBottom(root->left, curL-1, vec);
getLevelBottom(root->right,curL-1, vec);
}
class Solution {
public:
vector<vector<int> > levelOrderBottom(TreeNode *root) {
int L = getLevel(root);
vector<vector<int> > vec(L+1, vector<int>());
getLevelBottom(root, L, vec);
return vec;
}
};
35. Binary Tree Level Order Traversal && Binary Tree Level Order Traversal II的更多相关文章
- LeetCode: Binary Tree Level Order Traversal && Binary Tree Zigzag Level Order Traversal
Title: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ...
- Binary Tree Level Order Traversal,Binary Tree Level Order Traversal II
Binary Tree Level Order Traversal Total Accepted: 79463 Total Submissions: 259292 Difficulty: Easy G ...
- 【LeetCode】105 & 106 Construct Binary Tree from (Preorder and Inorder) || (Inorder and Postorder)Traversal
Description: Given arrays recording 'Preorder and Inorder' Traversal (Problem 105) or 'Inorder and ...
- LEETCODE —— binary tree [Same Tree] && [Maximum Depth of Binary Tree]
Same Tree Given two binary trees, write a function to check if they are equal or not. Two binary tre ...
- 遍历二叉树 traversing binary tree 线索二叉树 threaded binary tree 线索链表 线索化
遍历二叉树 traversing binary tree 线索二叉树 threaded binary tree 线索链表 线索化 1. 二叉树3个基本单元组成:根节点.左子树.右子树 以L.D.R ...
- Week2 - 669. Trim a Binary Search Tree & 617. Merge Two Binary Trees
Week2 - 669. Trim a Binary Search Tree & 617. Merge Two Binary Trees 669.Trim a Binary Search Tr ...
- HDU 3999 The order of a Tree
The order of a Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu3999The order of a Tree (二叉平衡树(AVL))
Problem Description As we know,the shape of a binary search tree is greatly related to the order of ...
- <hdu - 3999> The order of a Tree 水题 之 二叉搜索的数的先序输出
这里是杭电hdu上的链接:http://acm.hdu.edu.cn/showproblem.php?pid=3999 Problem Description: As we know,the sha ...
随机推荐
- codeforces 451D Count Good Substrings
题意:给定一个字符串,求有多少个奇数子串和多少偶数子串为 “回文串” 这边回文串很特殊之含有 ab 两种字母 而且 相邻的字母相同则消去一个 一直到不存在相邻的相同. 思路: 在这种串 ...
- Java设计模式系列1--原型模式(Prototype Method)
2014-02-14 11:27:33 声明:本文不仅是本人自己的成果,有些东西取自网上各位大神的思想,虽不能一一列出,但在此一并感谢! 原型模式,从名字即可看出,该模式的思想就是将一个对象作为原型, ...
- C语言修炼-第2天
从昨天被打击到下定决心以来,还是觉得学习代码是能让自己真正觉得充实的事情.其实潜意识里一直是这样的不是吗?从开始选择工科就没有后悔过,更不应该现在就放弃,其实自己的缺点本来就是不够扎实,给自己150天 ...
- TP验证
- 【转】精心推荐几款超实用的 CSS 开发工具
原文转自:http://www.html5cn.org/article-5741-1.html 摘要: 当你开发一个网站或 Web 应用程序的时候,有合适的工具,绝对可以帮助您节省大量的时间.在这篇文 ...
- CentOS 7 为firewalld添加开放端口及相关资料
1.运行.停止.禁用firewalld 启动:# systemctl start firewalld 查看状态:# systemctl status firewalld 或者 firewall-cm ...
- Scalding初探之一:基于Scala的Hadoop利器
把你从写繁琐的Map-reduce Job中解放出来,写分布式跟写本地程序没两样,Scala真真代表着先进生产力的方向啊. 好的,今天开始直播基于Scala的Scalding啦,循序渐进地看以下页面: ...
- sublime 的使用
常见问题: ctrl+`快捷见弹不出console怎么办! 解决方法: 估计适合电脑其他软件的快捷键冲突了,在sublime里面重新设置下快捷键 点击菜单中Preferences下面的Key Bind ...
- Directory的GetFiles方法
想实现一个功能 :比如多个业务审批流程公用一个审批表的时候,有一个提示审批信息的页面 ,点击该页面不同的业务审批流程记录的时候,跳转到不同业务流程的详细显示界面 额 这样说 貌似以后我自己也看不明白 ...
- 以ls命令为实例介绍命令基本格式
登陆Linux命令行会显示一行字符,例如[root@localhost ~ ]#, 其中root表示当前登陆用户,localhost表示主机名,~显示的是当前路径,(-表示当前用户的家目录),#表示 ...