日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 971. 翻转二叉树以匹配先序遍历(DFS)

發布時間:2024/7/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 971. 翻转二叉树以匹配先序遍历(DFS) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

給定一個有 N 個節點的二叉樹,每個節點都有一個不同于其他節點且處于 {1, …, 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

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/flip-binary-tree-to-match-preorder-traversal
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 邊先序遍歷,邊調換左右子樹節點
class Solution { //C++int i = 0;bool can = true;vector<int> ans; public:vector<int> flipMatchVoyage(TreeNode* root, vector<int>& voyage) {dfs(root, voyage);if(!can) return {-1};return ans;}void dfs(TreeNode* root, vector<int>& voyage){if(!can || !root)return;if(root->val == voyage[i]){ //根值等于數字i++;//指針后移一位if(root->left && root->left->val == voyage[i]){ //左邊有節點,值等于下一個,正常遍歷dfs(root->left, voyage);dfs(root->right, voyage);}else if(root->right && root->right->val == voyage[i]){ //右邊右節點,值等于下一個if(root->left)//如果還有左節點,那說明要調換左右順序ans.push_back(root->val);dfs(root->right, voyage);dfs(root->left, voyage);}else if(root->left || root->right)can = false;//如果上面分支都沒有進入,且還有子節點,說明不能匹配}else//根值不等,返回錯誤can = false;} };

8 ms 13.3 MB

python3 解答

# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = Noneclass Solution: # py3def __init__(self):self.i = 0self.can = Trueself.ans = []def flipMatchVoyage(self, root: TreeNode, voyage: List[int]) -> List[int]:def dfs(root, voyage):if not self.can or not root:returnif root.val == voyage[self.i]:self.i += 1if root.left and root.left.val == voyage[self.i]:dfs(root.left,voyage)dfs(root.right, voyage)elif root.right and root.right.val == voyage[self.i]:if root.left:self.ans.append(root.val)dfs(root.right, voyage)dfs(root.left, voyage)elif root.left or root.right:self.can = Falseelse:self.can = Falsedfs(root, voyage)if not self.can:return [-1]return self.ans

40 ms 13.7 MB

總結

以上是生活随笔為你收集整理的LeetCode 971. 翻转二叉树以匹配先序遍历(DFS)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。