1. 程式人生 > >二叉樹的層序遍歷(遞迴)

二叉樹的層序遍歷(遞迴)

輸出二叉樹的層序遍歷序列
如[2,6,8,null,null,10,12],輸出[[2],[6,8],[10,12]]
另:若要逆序輸出,即[[10,12],[6,8],[2]],則只需return前reverse(result.begin(),result.end());
Binary Tree Level Order Traversal
藉助二維vector跟num,依次插入各層

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> result; level(result,root,1); //reverse(result.begin(),result.end()); return result; } void level(vector<vector<int>> &result,TreeNode *root,int
num) { if(root==NULL) return; if(num>result.size()) result.push_back(vector<int>()); result[num-1].push_back(root->val); level(result,root->left,num+1); level(result,root->right,num+1); } };

相關推薦

typedef struct { BTNode* left; BTNode* right; int data; } BTNode; typedef void (*visit_t)(BTNode* node); void traversal(BTN

與非演算法及C語言實現

二叉樹後序遍歷的實現思想是:從根節點出發,依次遍歷各節點的左右子樹,直到當前節點左右子樹遍歷完成後,才訪問該節點元素。 圖 1 二叉樹   如圖 1 中,對此二叉樹進行後序遍歷的操作過程為: 從根節點 1 開始,遍歷該節點的左子樹(以節點 2 為根節點); 遍歷節點 2 的左子樹(以節點 4 為根

和非演算法及C語言實現

二叉樹中序遍歷的實現思想是: 訪問當前節點的左子樹; 訪問根節點; 訪問當前節點的右子樹; 圖 1 二叉樹   以圖  1 為例,採用中序遍歷的思想遍歷該二叉樹的過程為: 訪問該二叉樹的根節點,找到 1; 遍歷節點 1 的左子樹,找到節點 2; 遍歷節點 2 的左子樹,找到節點 4;

與非及C語言實現

二叉樹先序遍歷的實現思想是: 訪問根節點; 訪問當前節點的左子樹; 若當前節點無左子樹,則訪問當前節點的右子樹; 圖 1 二叉樹   以圖  1 為例,採用先序遍歷的思想遍歷該二叉樹的過程為: 訪問該二叉樹的根節點,找到 1; 訪問節點 1 的左子樹,找到節點 2; 訪問節點 2 的左子

關鍵詞:////層次

二叉樹層序遍歷 實現 def levelOrder(self, root): if root is None: return [] res = [] queue = [root]

輸出二叉樹的層序遍歷序列 如[2,6,8,null,null,10,12],輸出[[2],[6,8],[10,12]] 另:若要逆序輸出,即[[10,12],[6,8],[2]],則只需return

實現java)

後序遍歷:雙棧法,和層次遍歷(雙佇列)很相似,唯一區別在於層次遍歷用的 是佇列,後序遍歷用的是棧。 public static void posOrderUnRecur1(Node head){ System.out.print("PosOrder:"); if(head !=

演算法--20181109--實現

1.二叉樹的中序遍歷 首先看一下遞迴方式的實現方式: class TreeNode: left = None right = None var = 0 def __init__(self, var): self.var = var

(非)演算法實現--C語言

今天繼續二叉樹的學習。 昨天寫了一遍二叉樹的先序遍歷(非遞迴)演算法,今天寫一下二叉樹的二叉樹的中序遍歷(非遞迴)演算法。中序遍歷的非遞迴演算法有兩種,但是個人覺得只要掌握一種就可以了,只要自己的邏輯清晰,會哪一種又有什麼關係呢~ 首先給出今天的二叉樹的示例圖: 程式碼如下:

的各種實現版本

先序,中序,後序遍歷 先序:先根,後左子樹,後右子樹 中序:先左子樹,後根,後右子樹 後序:先左子樹,後右子樹,後根 遞迴程式碼實現: class TreeNode(object): def __init__(self, x): self.

面試題目整理--20181109--實現

非遞迴實現二叉樹的中序遍歷 首先看一下遞迴方式的實現方式: class TreeNode: left = None right = None var = 0 def __init__(self, var): self.var

深度優先、非、廣度優先、構建

public class BinaryTree { static class TreeNode{ int value; TreeNode left; TreeNode right; public Tree

(非)演算法實現--C語言

  一直說要寫二叉樹的後序非遞迴遍歷演算法,但是前兩天各種事情,今天終於有時間好好寫一寫二叉樹的後序遍歷演算法。   二叉樹的後序遍歷演算法比先序和中序的遍歷演算法要複雜一些。其出棧條件有兩種情況: 棧頂元素所指向的節點的左子樹和右子樹均為空; 棧頂元素所指向的節點的左子樹

與非演算法

       前幾天參加了阿里暑期實習的內推面試,發現自己的資料結構演算法基礎特別薄弱,比如其中一個問題是中序遍歷的遞迴與非遞迴演算法,我平時看資料結構只知道遞迴演算法,非遞迴的演算法直接被問懵逼了,在思考了幾十秒之後想出了用陣列存放每次遍歷節點的父節點,然後用for迴圈遍

演算法

我們知道,在深度搜索遍歷的過程中,之所以要用遞迴或者是用非遞迴的棧方式,參考二叉樹非遞迴中序遍歷,都是因為其他的方式沒法記錄當前節點的parent,而如果在每個節點的結構裡面加個parent 分量顯然是不現實的,那麼Morris是怎麼解決這一問題的呢?好吧,他用得很巧

建立以及和非方式

#include <iostream> #include <assert.h> #include <stack> using namespace std; typedef struct biTreeNode { c

【LeetCode-面試算法經典-Java實現】【107-Binary Tree Level Order Traversal IIII

lin -m length ret itl pub util 實現類 markdown 【107-Binary Tree Level Order Traversal II(二叉樹層序遍歷II)】 【LeetCode-面試算法經典-Java實現】【全

劍指Offer——:把列印成多行

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

Binary Tree Level Order Traversal-儲存並返回結果集

題目描述 Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level). For example: Given

LeetCode | Binary Tree Level Order Traversal

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level). For example: Gi