題目描述:
給定乙個二叉樹,返回其結點 垂直方向(從上到下,逐列)遍歷的值。
如果兩個結點在同一行和列,那麼順序則為 從左到右。
示例 1:
輸入: [3,9,20,null,null,15,7]
輸出:[
[9],
[3,15],
[20],
[7]]
示例 2:
輸入: [3,9,8,4,0,1,7]
輸出:[
[4],
[9],
[3,0,1],
[8],
[7]]
示例 3:
輸入: [3,9,8,4,0,1,7,null,null,null,2,5](注意:0 的右側子節點為 2,1 的左側子節點為 5)
輸出:[
[4],
[9,5],
[3,0,1],
[8,2],
[7]]
方法1:
主要思路:
(1)使用兩個佇列的層次遍歷,乙個佇列維護正常的層次遍歷,乙個佇列維護當前結點所在的列的的索引;
(2)將樹的列從根節點作為0,開始出發,向左的結點減一,向右的結點加一;
(3)使用unordered_map儲存各列索引對應的資料;
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution;}
map<
int,vector<
int>> mp;
//儲存列的索引對應的資料
queue<
int> index;
//調整各個結點的列索引
queue
> q;
//儲存各個結點,用於層次遍歷
q.push
(root)
; index.
push(0
);while
(!q.
empty()
)if(root-
>right)
}//將結果提出
vector
int>>res;
for(
auto
&it:mp)
return res;}}
;
004 二叉樹垂直遍歷
對於乙個二叉樹,輸出它的垂直遍歷結果 對於同一列的節點,按照從左向右,從上向下的順序排列。例如,對於以下二叉樹 1 2 3 4 垂直遍歷的結果是 2 1 4 3 輸入 第一行是n,表示節點個數 節點編號從0到n 1 當n 1時,表示輸入結束 之後的n行,每一行有三個整數,分別表示 節點的數值,左子樹...
二叉樹的遍歷 二叉樹遍歷與儲存
在資料結構中,二叉樹是非常重要的結構。例如 資料庫中經常用到b 樹結構。那麼資料庫是如何去單個查詢或者範圍查詢?首先得理解二叉樹的幾種遍歷順序 先序 中序 後序 層次遍歷。先序 根節點 左子樹 右子樹 中序 左子樹 根節點 右子樹 後序 左子樹 右子樹 根節點 按層級 class node if c...
構建二叉樹 遍歷二叉樹
陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...