《剑指offer》刷题笔记(举例让抽象具体化):从上往下打印二叉树



前言:

当一眼看不出问题中隐藏的规律时,我们可以试着用一两个具体的例子模拟操作的过程,说不定这样那就能通过具体的例子找到抽象的规律。

题目描述

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

解题思路

再熟悉不过的层序遍历,BFS即可实现。用队列来进行层序遍历,同时用一个vector容器来存储每一层的值。

举例如下:



C++版代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<int> PrintFromTopToBottom(TreeNode* root) {
vector<int> result;
queue<TreeNode*> que;
TreeNode* fr;
if(root == NULL)
return result;
que.push(root);
while(!que.empty()){
fr = que.front();
result.push_back(fr->val);
if(fr->left != NULL)
que.push(fr->left);
if(fr->right != NULL)
que.push(fr->right);
que.pop();
}
return result;
}
};

Python版代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回从上到下每个节点值列表,例:[1,2,3]
def PrintFromTopToBottom(self, root):
# write code here
result=[]
if not root:
return []
que=[]
que.append(root)
while len(que):
t=que.pop(0)
result.append(t.val)
if t.left:
que.append(t.left)
if t.right:
que.append(t.right)
return result

系列教程持续发布中,欢迎订阅、关注、收藏、评论、点赞哦~~( ̄▽ ̄~)~

完的汪(∪。∪)。。。zzz

0%