1. 程式人生 > >《劍指offer》把二叉樹列印成多行

《劍指offer》把二叉樹列印成多行

【 宣告:版權所有,轉載請標明出處,請勿用於商業用途。  聯絡信箱:[email protected]

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


思路
考慮到這是一個寬度優先搜尋的問題,要求同一層的結點在陣列中也在同一行,所以我們每次遍歷玩一層的結點的時候,我們還需要儲存期路徑,這就需要兩個佇列來完成。

/*
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> > ans;
			vector<int> path;
			if(pRoot==nullptr)
				return ans;
			queue<TreeNode*> Q,tmp;
			Q.push(pRoot);
			while(!Q.empty())
			{
				while(!Q.empty())
				{
					TreeNode *pNode = Q.front();
					path.push_back(pNode->val);
					Q.pop();
					if(pNode->left)
						tmp.push(pNode->left);
					if(pNode->right)
						tmp.push(pNode->right);
				}
				ans.push_back(path);
				path.clear();
				while(!tmp.empty())
				{
					Q.push(tmp.front());
					tmp.pop();
				}
			}
			return ans;
		}

};


相關推薦

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-列印-php

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

offer-----列印

import java.util.ArrayList; import java.util.Queue; import java.util.LinkedList; /* public class TreeNode {     int val = 0;     TreeNode left = null;    

Offer------列印(層序遍歷)

題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 <分析>: 本題就是多了個條件 一層輸出一行 那麼就多設定兩個變數即可, 一個此行開始start,另一個此行

[offer]列印

題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 分析:層序遍歷用佇列,這道題比較討厭的是要把每層分開,如果只是單純把值全部打印出來,只要判斷佇列是否為空就可以了,這

offer——列印

題目描述: 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 思路: 用一個佇列儲存需要列印的結點,另外需要定義兩個變數,一個表示當前層已經列印的結點數,另一個表示當前層需要列

offer列印

華電北風吹 天津大學認知計算與應用重點實驗室 日期:2015/10/8 題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 解析:這個跟按行列印一樣的思路即可。

Offer -- 列印(六十)

把二叉樹列印成多行(六十) 題目描述: 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 程式碼(已在牛客上 AC) 思路: BFS class Solution {

offer_列印+之字形

/* 1. 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 按層次列印可以用佇列,如何保證一層輸出一行, 進佇列的時候,加標記,出隊時候遇到標記則一行結束 劍指offer思路: 用兩個變量表示當前層還未列印的節點數和下一層的節點數 */ import

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

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

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列印

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

offer--面試題60:列印

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

offer》:[60]列印

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

Offer-Java-列印

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

Offer——列印層序遍歷)

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