1. 程式人生 > >劍指offer-題60:把二叉樹列印成多行

劍指offer-題60:把二叉樹列印成多行

題目描述

從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。

實驗平臺:牛客網

解決思路:

這題跟之前的劍指offer-題23:從上往下列印二叉樹很類似,就是多了一個需要換行列印的條件。這裡增加了2個變數,一個是下一層需要列印的結點數:nextNodesNum,還有一個是這一層還需列印的剩餘結點數:NeedToAdd,當其值為0時,表示這一層已經列印完畢。程式碼如下:

java:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;


/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;
    }
}
*/
public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>(); if (pRoot != null) { Queue<TreeNode> queue = new LinkedList<TreeNode>
(); ArrayList<Integer> oneRow = new ArrayList<>(); queue.offer(pRoot); int nextNodesNum = 0; int NeedToAdd = 1; while (!queue.isEmpty()) { TreeNode tempNode = queue.poll(); oneRow.add(new Integer(tempNode.
val)); if (tempNode.left != null) { queue.offer(tempNode.left); nextNodesNum++; } if (tempNode.right != null) { queue.offer(tempNode.right); nextNodesNum++; } NeedToAdd--; if (NeedToAdd == 0) { list.add(oneRow); oneRow = new ArrayList<Integer>(); NeedToAdd = nextNodesNum; nextNodesNum = 0; } } } return list; } }

python:

相關推薦

offer-60列印

題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 實驗平臺:牛客網 解決思路: 這題跟之前的劍指offer-題23:從上往下列印二叉樹很類似,就是多了一個需要換

Offer_程式設計60列印

題目:從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 牛客網:連結 總感覺這樣的題不是這麼做的。就像陣列一樣,有簡便方法。 # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self

offer--面試題60列印

題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 python實現: # -*- coding:utf-8 -*- # class TreeNode: #     de

(C++)offer-60列印

劍指offer-60:把二叉樹列印成多行 目錄 1題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 2解析及答案 層次遍歷 跟上一題一樣,將奇偶行去掉

Offer——列印層序遍歷)

對於二叉樹的最好的解決辦法就是遞迴。遍歷方法無外乎先序遍歷,中序遍歷,後序遍歷方法以及層序遍歷方法。這裡給大家安利一個關於樹的面試題的連結,博主walkinginthewind比較全面且詳細的介紹了二叉樹相關的面試題:對於層序遍歷,最好的方法就是用佇列記錄遍歷節點的值,按層列

offer列印(python)

題目描述從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。思路:1、把每層節點的val值用list存好2、把每層節點存好:①計算當層節點的個數,這樣就保證下一步每層的結點都被pop光②然後依次彈出從左到右的每個節點,然後在list中加入該節點對應的左結點、右節點

Python列印

牛客網上的劍指 offer的線上程式設計: 題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 # -*- coding:utf-8 -*- class TreeNode: def __init__(self, x):

14列印

題目:從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 思路:按層列印,使用按層遍歷(寬度優先遍歷)即可,需要使用一個佇列(通過LinkedList來充當佇列),然後進行迴圈即可,如果不需要考慮換行,那麼十分簡單。如果需要考慮換行,那麼關鍵就是確定何時進行換

Offer 60. 列印

題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 題目地址 https://www.nowcoder.com/practice/445c44d982d04483b04a54f298796288?tpId=13&tqId=11213&rp=3&ru=/ta/co

offer 60. 列印

題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 思路: 兩個棧,分二級,第一級存一行的數curStack,第二級存著一行數所對應的left,right的值nextStack,每次結束 一輪迴圈,把curStack的值給result,然後再將nodes設

offer》:[60]列印

題目:從上到下安層列印二叉樹,同一層的結點按從左到右的順序列印,每一層列印一行。例如,圖(1)中二叉樹以及列印結果為: 這個題其實很簡單,我們只需要設定兩個變數就可以搞定。一個變量表示當前層中還沒有

Offer-60-列印

題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; /* public class

offer系列——按之字形順序列印列印,序列化二

按之字形順序列印二叉樹 題目描述 請實現一個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。 解題思路: 法一: 需要兩個棧。我們在列印某一行節點時,把下一層的子節點儲存到相應的棧裡。 如果

offer列印

時間限制:1秒 空間限制:32768K 熱度指數:101798 題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 思路 import java.util.ArrayList; /* public class TreeNode { int

offer-------列印

題目: 思路: 程式碼: struct TreeNode { int val; TreeNode *left; TreeNode *right; } void Print(BinaryTreeNOde* pRoot) { if(pRoot == NUL

offer -- 列印

題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 AC程式碼 層次遍歷二叉樹用到的資料結構是佇列。 import java.util.ArrayList; import java.util.Queue; import java.util

牛客網offer-列印

題目描述從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。/* struct TreeNode { int val; struct TreeNode *left;

資料結構-offer-列印

題目:從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。因為要按層列印,首先想到的是層次遍歷。在二叉樹的深度這道題中,首先應用到了層次遍歷。每一層的節點值存入一個小vector c,再把小vector c存到大vector vec中,列印vec。(題目沒有要求換

Offer-Java-列印

題目 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 程式碼 此處只需要一個佇列進行層序遍歷即可。 import java.util.*; /* public class Tre

offer-列印-php

題目 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 題解 利用佇列先進先出的特點就可以完成。 程式碼 <?php /*class TreeN