1. 程式人生 > >《劍指offer》(面試題23):從上往下列印二叉樹

《劍指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 列印

解題思路: 考察層次遍歷二叉樹,可以利用一個佇列來實現。當一個節點從佇列頭部移除時,若其存在左子節點,則左子節點入佇列;若存在右子節點,則右子節點入佇列,如此迴圈下去,直到佇列為空,證明佇列中的所有元

offer23——列印

題目 從上往下打印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印 分析 從上到下列印,即就是按層遍歷這棵二叉樹,然後將其節點上的值打印出來。如果該樹只有一個根結點,那麼就直接列印該節點就好,這是一種最極端的情況,可是我們常常遇到的並不是這樣的情況,即就是列印完一個結

[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