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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode 1660. 纠正二叉树(BFS)

發(fā)布時間:2024/7/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1660. 纠正二叉树(BFS) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

你有一棵二叉樹,這棵二叉樹有個小問題,其中有且只有一個無效節(jié)點,它的右子節(jié)點錯誤地指向了與其在同一層且在其右側(cè)的一個其他節(jié)點。

給定一棵這樣的問題二叉樹的根節(jié)點 root ,將該無效節(jié)點及其所有子節(jié)點移除(除被錯誤指向的節(jié)點外),然后返回新二叉樹的根結(jié)點。

自定義測試用例:

測試用例的輸入由三行組成:

TreeNode root int fromNode (在 correctBinaryTree 中不可見) int toNode (在 correctBinaryTree 中不可見)

當以 root 為根的二叉樹被解析后,值為 fromNode 的節(jié)點 TreeNode 將其右子節(jié)點指向值為 toNode 的節(jié)點 TreeNode 。
然后, root 傳入 correctBinaryTree 的參數(shù)中。

示例 1:

輸入: root = [1,2,3], fromNode = 2, toNode = 3 輸出: [1,null,3] 解釋: 值為 2 的節(jié)點是無效的,所以移除之。

示例 2:

輸入: root = [8,3,1,7,null,9,4,2,null,null,null,5,6], fromNode = 7, toNode = 4 輸出: [8,3,1,null,null,9,4,null,null,5,6] 解釋: 值為 7 的節(jié)點是無效的,所以移除這個節(jié)點及其子節(jié)點 2。提示: 樹中節(jié)點個數(shù)的范圍是 [3, 10^4]-10^9 <= Node.val <= 10^9 所有的 Node.val 都是互不相同的。 fromNode != toNode fromNode 和 toNode 將出現(xiàn)在樹中的同一層。 toNode 在 fromNode 的右側(cè)。 fromNode.right 在測試用例的樹中建立后為 null 。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/correct-a-binary-tree
著作權(quán)歸領扣網(wǎng)絡所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

2. 解題

  • 廣度優(yōu)先搜索,按層遍歷
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/ class Solution { public:TreeNode* correctBinaryTree(TreeNode* root) {unordered_set<TreeNode*> vis;queue<tuple<TreeNode*,TreeNode*,int>> q; // 當前節(jié)點,其父節(jié)點,左0還是右1q.push({root, NULL, 0});TreeNode* cur, *parent;int dir;bool finish = false;while(!q.empty()){int size = q.size();while(size--){tie(cur, parent, dir) = q.front();q.pop();if(cur->left){q.push({cur->left, cur, 0});vis.insert(cur->left);}if(cur->right){if(vis.count(cur->right)) // 遇到已經(jīng)訪問過的右節(jié)點,cur就是要找的節(jié)點{if(dir==0)parent->left = NULL;//斷開elseparent->right = NULL;finish = true;break;}q.push({cur->right, cur, 1});vis.insert(cur->right);}}if(finish) break;}return root;} };

116 ms 65.7 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結(jié)

以上是生活随笔為你收集整理的LeetCode 1660. 纠正二叉树(BFS)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。