《劍指offer》(面試題23):從上往下列印二叉樹
前言:
當一眼看不出問題中隱藏的規律時,我們可以試著用一兩個具體的例子模擬操作的過程,說不定這樣那就能通過具體的例子找到抽象的規律。
題目描述
從上往下打印出二叉樹的每個節點,同層節點從左至右列印。
解題思路
再熟悉不過的層序遍歷,BFS即可實現。用佇列來進行層序遍歷,同時用一個vector容器來儲存每一層的值。
舉例如下:
python 程式碼實現:
# -*- 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
相關推薦
《劍指offer》(面試題23):從上往下列印二叉樹
前言: 當一眼看不出問題中隱藏的規律時,我們可以試著用一兩個具體的例子模擬操作的過程,說不定這樣那就能通過具體的例子找到抽象的規律。 題目描述 從上往下打印出二叉樹的每個節點,同層節點從左至右列印。 解題思路 再熟悉不過的層序遍歷,BFS即可實現。用佇列來進行層序
劍指offer{面試題23:從上往下列印二叉樹}
簡單的二叉樹層序遍歷,利用佇列的先進先出結構 關於層序遍歷層序遍歷 貼程式碼 public class Test23 { /** * 二叉樹的樹結點 */ public static class BinaryTreeNode { int
【劍指offer】面試題25:從上往下列印二叉樹
二、解題思路: 採用一個例子說明:8,6,10,5,7,9,11. 對於第一層,只有根節點 “8”,第二層有節點“6”和“10”。 從根節點分析,為了能夠接下來列印節點為8的兩個子節點,我們應該在遍歷到
劍指offer-22:從上往下列印二叉樹
題目描述 從上往下打印出二叉樹的每個節點,同層節點從左至右列印。 思路 二叉樹的層序遍歷,藉助一個佇列實現。 程式碼 public class Solution22 { public ArrayList<Integer> PrintFromTopToB
劍指 Offer - 22:從上往下列印二叉樹
題目描述 從上往下打印出二叉樹的每個節點,同層節點從左至右列印 題目連結:https://www.nowcoder.com/practice/7fe2212963db4790b57431d9ed259701 解題思路 取出每層每個節點,輸出值同時儲
劍指offer:從上往下列印二叉樹
題目描述 從上往下打印出二叉樹的每個節點,同層節點從左至右列印。 實際考察樹的層次遍歷(廣度優先遍歷)演算法,從上往下遍歷二叉樹,本質上就是廣度優先遍歷二叉樹。 10 / \ 6 14
[劍指offer學習心得]之:從上往下列印二叉樹
題目:從上往下打印出二叉樹的每個結點,同一層的結點按照從左向右的順序列印。 解題思路 其實一想就覺得是寬度優先遍歷。當然這樣想是不是太粗暴了,循序漸進循序漸進 這道題實質就是考察樹的遍歷演算法,只是這種演算法不是我們熟知的那三種,所以呢我們可能一下子也
劍指offer(面試題29):順時針列印矩陣
/* * 順時針列印矩陣 * 注意矩陣的維度 */ #include<iostream> using namespace std; //只要當前的起始行號小於終止行號或者起始列號小於終止列號,就可以繼續順時針列印 // 但是隨著順勢怎列印,剩下
劍指offer(面試題39):陣列中出現次數超過陣列長度一半的數字
方法1: 從數學角度看,所求的數一定的原陣列(有序化)的中位數,那麼,我們可以通過對陣列排序,這樣得到的時間複雜度是O(nlogn)O(nlogn)。而如果能夠優化到在O(n)O(n)的時間內找到,就更好了。基於快速排序的partition階段,如果我們可以
劍指offer(面試題35):複雜連結串列的複製
/* * 複雜連結串列的複製 * 複雜連結串列是指,結點的指標可能不規則地指向另一個結點 */ #include<iostream> using namespace std; struct ComplexListNode { int v
劍指offer(面試題38):字串的排列
分析: 求字串中所有字元的全排列,實際上按照全排列的計算公式來理解,第一步是求出所有可能出現在第一個位置的字元,即用首個字元分別後餘下的字元交換;第二步是固定首個字元,餘下字元組成的子串進行第一步的
劍指offer(面試題21):根據給定條件劃分陣列
/* * 題目 * 輸入一個數組,實現一個函式來調整該陣列中數字的順序,使得所有奇數位於陣列的前半部分 * 偶數位於陣列的後半部分 * 同時考慮程式碼的可擴充套件行 */ #include <i
劍指offer(面試題31):棧的壓入和彈出序列
/* * 給定兩個序列,一個是棧的壓入序列,一個是彈出序列,判斷彈出序列能否匹配壓入序列 */ #include<iostream> #include<stack> usi
劍指offer面試題23 從上往下列印二叉樹
解題思路: 考察層次遍歷二叉樹,可以利用一個佇列來實現。當一個節點從佇列頭部移除時,若其存在左子節點,則左子節點入佇列;若存在右子節點,則右子節點入佇列,如此迴圈下去,直到佇列為空,證明佇列中的所有元
劍指offer(23)——從上往下列印二叉樹
題目 從上往下打印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印 分析 從上到下列印,即就是按層遍歷這棵二叉樹,然後將其節點上的值打印出來。如果該樹只有一個根結點,那麼就直接列印該節點就好,這是一種最極端的情況,可是我們常常遇到的並不是這樣的情況,即就是列印完一個結
[劍指offer][面試題23]從上往下列印二叉樹
從上往下打印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印。 #include <iostream> #include <stack> using namespace std; struct Node{ int m_nData;
劍指Offer之面試題23:從上往下列印二叉樹
所有程式碼均通過G++編譯器測試,僅為練手紀錄。 //面試題23:從上往下列印二叉樹 //題目:從上往下打印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印。 //面試題23:從上往下列印二
《劍指offer》系列 從上往下列印二叉樹(Java)
連結 牛客:從上往下列印二叉樹 題目描述 從上往下打印出二叉樹的每個節點,同層節點從左至右列印。 思路 題目給定函式返回的只是一個ArrayList,還是比較簡單的,這種型別題目基本都要藉助一個輔助的佇列,看程式碼大家應該都能理解。 程式碼 import ja
劍指offer——(13)從上往下列印二叉樹
遵從先上後下,先左後右的原則,用if——else遞迴即可。 import java.util.ArrayList; /** public class TreeNode { int val = 0; TreeNode left = null; Tree
《劍指offer》面試題32:從上到下列印二叉樹
題目一:不分行從上到下列印二叉樹 從上到下打印出二叉樹的每個節點,同一層的節點按照從左到右的順序列印。 二叉樹節點的定義如下: struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNo