leetcode 二叉樹 二叉樹的層次遍歷

2021-09-27 02:25:33 字數 1289 閱讀 6336

給定乙個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。

例如:給定二叉樹: [3,9,20,null,null,15,7],

3/ \

9  20

/  \

15   7

返回其層次遍歷結果:

[[3],

[9,20],

[15,7]

]方法一:遞迴

思路:比較訪問節點所在層次level和當前最高層次len(levels)判定是否需要新增乙個空列表

當前節點插入對應層的列表levels[level]

遞迴非空的孩子節點helper(node.left/node.right,level+1)

時間複雜度:o(n),每個節點會被訪問一次

空間複雜度:o(n),輸出結果包含n個節點的值

list> levels=new arraylist>();

public void helper(treenode node,int level)

public list> levelorder(treenode root)

leetcode的結果:

方法二:迭代,廣度優先遍歷

初始化佇列只包含乙個節點root和層次編號0(level=0)

佇列非空,進入迴圈

時間複雜度:o(n),每個節點會被訪問一次

空間複雜度:o(n),輸出結果包含n個節點的值,且多了乙個佇列的空間

public list> levelorder1(treenode root){

list> levels =new arraylist>();

if(root==null) return levels;

queuequeue=new linkedlist();

queue.add(root);

int level=0;

while(!queue.isempty()) {

// start the current level

levels.add(new arraylist());

// number of elements in the current level

int level_length=queue.size();

for (int i=0;i方法二用時3ms,方法一2ms,遞迴優於迭代

leetcode 二叉樹 對稱二叉樹

給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。1 2 2 3 4 4 3 但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 1 2 2 3 3 方法一 遞迴 思路 如果乙個樹的左子樹與右子樹映象對稱,則該樹是對稱的 兩個樹互為映象的...

LeetCode (二叉樹)反轉二叉樹

遞迴交換每乙個節點的左右子樹,重點在於訪問每乙個節點,然後交換左右子樹 definition for a binary tree node.struct treenode struct treenode inverttree struct treenode root 由於至少要講每乙個節點都訪問一次...

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...