LeetCode 二叉樹1 樹的遍歷

2022-09-08 13:09:13 字數 1968 閱讀 9013

note:後序遍歷在表示式上的應用

① 用遞迴的方式遍歷二叉樹

note:

遞迴的實現方式裡,函式的返回值需要為void型別,否則沒法進行。

所以我們需要設定乙個help函式來完成遞迴。

後序遍歷

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

void helper(treenode *pnode , vector&node_ids)

else

}};

前序遍歷
/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

void helper(treenode *pnode , vector&node_ids)

else

}};

中序遍歷
/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

void helper(treenode *pnode , vector&node_ids)

else

}};

② 用非遞迴的方式遍歷二叉樹

用遞迴方式實現的問題都可以用非遞迴方法實現。

遞迴的本質就是利用函式棧來儲存資訊。

用自己申請的資料結構來代替函式棧,可以實現同樣的功能。

①使用棧實現前序遍歷:

申請乙個棧stack,頭結點入棧。

棧頂元素出棧,出棧元素的右節點和左節點依次入棧。

重複第二步,直到棧為空

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

else

}return orders;

}};

②使用棧實現中序遍歷:

申請乙個新的棧stack,定義乙個變數 cur = root 節點

cur入棧

令 cur = cur.left,重複步驟2,直到cur = null

stack.pop(); 出棧的節點記為 node,輸出 node.val

令 cur = node.right 重複2,3

struct treenode 

};class solution

else}}

return inorder;

}};

其實就是逐層遍歷樹的結構

廣度優先搜尋一種廣泛運用在樹或圖這類資料結構中,遍歷或搜尋的演算法。

該演算法從乙個根節點開始,首先訪問節點本身。

然後遍歷它的相鄰節點,其次遍歷它的二級鄰節點、**鄰節點,以此類推。

當我們在樹中進行廣度優先搜尋時,我們訪問的節點的順序是按照層序遍歷順序的。

實現有兩種模板

以層為單位輸出

以節點為單位輸出

按層為單位過程

頭節點入隊

如果佇列不為空,取到佇列的元素個數,得知上乙個迴圈加入佇列的元素個數,也就是上一層的元素個數。for迴圈令上一層的元素出佇列,並把其左右子樹入隊。

核心:就是 while 迴圈裡面套乙個 for 迴圈。..

.

struct treenode 

};class solution

ans.push_back(cur);

}return ans;

}};

LeetCode 初級演算法 樹 二叉樹的層次遍歷

給定乙個二叉樹,返回其按層次遍歷的節點值。即逐層地,從左到右訪問所有節點 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回其層次遍歷結果 3 9,20 15,7 一開始的解法是,先層次遍歷把所有的樹節點存放進乙個二維list中,然後在做一次巢狀迴圈將每個節點的...

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 由於至少要講每乙個節點都訪問一次...