翻轉二叉樹以匹配先序遍歷
給定乙個有 n 個節點的二叉樹,每個節點都有乙個不同於其他節點且處於 中的值。
通過交換節點的左子節點和右子節點,可以翻轉該二叉樹中的節點。
考慮從根節點開始的先序遍歷報告的 n 值序列。將這一 n 值序列稱為樹的行程。
(回想一下,節點的先序遍歷意味著我們報告當前節點的值,然後先序遍歷左子節點,再先序遍歷右子節點。)
我們的目標是翻轉最少的樹中節點,以便樹的行程與給定的行程 voyage 相匹配。
如果可以,則返回翻轉的所有節點的值的列表。你可以按任何順序返回答案。
如果不能,則返回列表 [-1]。
示例 1:
輸入:root = [1,2], voyage = [2,1]
輸出:[-1]
示例 2:
輸入:root = [1,2,3], voyage = [1,3,2]
輸出:[1]
示例 3:
輸入:root = [1,2,3], voyage = [1,2,3]
輸出:1 <= n <= 100
class
solution
void
dfs(treenode *root,vector<
int>
& voyage)
k++;if
(root-
>left&&root-
>left-
>val==voyage[k]
)dfs
(root-
>left,voyage)
,dfs
(root-
>right,voyage)
;else
if(root-
>right&&root-
>right-
>val==voyage[k]
)else}}
;
先序構建二叉樹及先序遍歷二叉樹
先序為dlr d 根節點,l 左子樹,r 右子樹 a b c d e 先序序列為abdce,輸入為abd c e 表示空格,代表空樹 輸入按滿二叉樹輸入 每乙個節點都是乙個子樹的根節點 void pre create tree treenode t else else void pre visit ...
先序構建二叉樹及先序遍歷二叉樹
先序為dlr d 根節點,l 左子樹,r 右子樹 a b c d e 先序序列為abdce,輸入為abd c e 表示空格,代表空樹 輸入按滿二叉樹輸入 每乙個節點都是乙個子樹的根節點 void pre create tree treenode t else else void pre visit ...
二叉樹的先序遍歷
二叉樹先序遍歷遵循 訪問根結點 遍歷其左子樹 遍歷其右子樹 簡單來說就是根 左樹 左樹的左樹 左樹的左樹的左樹 一直遍歷到沒有左樹為止 右樹 如果沒沒有右樹就往上 一直遍歷到右樹的右樹也沒有了 就結束了 class treenode object 初始化樹的 def init self,data 0...