971 翻轉二叉樹以匹配先序遍歷

2021-10-24 15:28:05 字數 960 閱讀 7328

翻轉二叉樹以匹配先序遍歷

給定乙個有 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...