版权声明:本文为博主NJU_ChopinXBP原创文章,发表于CSDN,仅供交流学习使用,转载请私信或评论联系,未经博主允许不得转载。感谢您的评论与点赞。 https://blog.csdn.net/qq_20304723/article/details/87980981
2019.2.27 《剑指Offer》从零单刷个人笔记整理(66题全)目录传送门
其实这道题就是层序遍历二叉树,之前已经写过了:#数据结构与算法学习笔记#剑指Offer21:从上往下打印二叉树/层次遍历二叉树(Java、C/C++)
相当于复习一下,没什么好讲的。难一点的是上一道题,按之字型打印二叉树:#数据结构与算法学习笔记#剑指Offer57:按之字形顺序打印二叉树(Java、C/C++)
题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
Java实现:
/**
*
* @author ChopinXBP
* 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
*
*/
import java.util.ArrayList;
import java.util.LinkedList;
public class PrintTree_59 {
public static class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeNode pHead = new TreeNode(0);
TreeNode p1= new TreeNode(1);
TreeNode p2= new TreeNode(2);
TreeNode p3= new TreeNode(3);
TreeNode p4= new TreeNode(4);
TreeNode p5= new TreeNode(5);
TreeNode p6= new TreeNode(6);
pHead.left = p1;
pHead.right = p2;
p1.left = p3;
p1.right = p4;
p2.left = p5;
p2.right = p6;
ArrayList<ArrayList<Integer>> result = Print(pHead);
for(int i = 0; i < result.size(); i++) {
for(int j = 0; j < result.get(i).size(); j++) {
System.out.print(result.get(i).get(j) + " ");
}
System.out.println(" ");
}
}
public static ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
if(pRoot == null)return result;
LinkedList<TreeNode> tree = new LinkedList<>();
tree.add(pRoot);
while(!tree.isEmpty()) {
TreeNode pNode;
ArrayList<Integer> list = new ArrayList<>();
int num = tree.size();
for (int i = 0; i < num; i++) {
pNode = tree.pollFirst();
if (pNode.left != null) {
tree.add(pNode.left);
}
if (pNode.right != null) {
tree.add(pNode.right);
}
list.add(pNode.val);
}
if(!list.isEmpty()) result.add(list);
}
return result;
}
}
C++实现示例:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int> > vv;
vector<int> ve;
queue<TreeNode*> que;
queue<int> dque;
int depth=0;
que.push(pRoot);
dque.push(depth);
TreeNode *node;
while(!que.empty()){
node=que.front();
if(depth!=dque.front()){
vv.push_back(ve);
ve.clear();
depth=dque.front();
}
que.pop();
dque.pop();
if(node){
que.push(node->left);
que.push(node->right);
dque.push(depth+1);
dque.push(depth+1);
ve.push_back(node->val);
}
}
return vv;
}
};
#Coding一小时,Copying一秒钟。留个言点个赞呗,谢谢你#