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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode 572. 另一个树的子树(二叉树迭代器)

發布時間:2024/7/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 572. 另一个树的子树(二叉树迭代器) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

給定兩個非空二叉樹 s 和 t,檢驗 s 中是否包含和 t 具有相同結構和節點值的子樹。s 的一個子樹包括 s 的一個節點和這個節點的所有子孫。s 也可以看做它自身的一棵子樹。

示例 1: 給定的樹 s:3/ \4 5/ \1 2 給定的樹 t:4 / \1 2 返回 true,因為 t 與 s 的一個子樹擁有相同的結構和節點值。示例 2: 給定的樹 s:3/ \4 5/ \1 2/0 給定的樹 t:4/ \1 2 返回 false

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

2. 二叉樹迭代器

  • 對樹s中的每個節點Si,Si與t進行遞歸比較
  • Si采用二叉樹迭代器產生
  • 該解法相當于暴力查找
class Solution {TreeNode *cur, *temp;stack<TreeNode*> stk; public:bool isSubtree(TreeNode* s, TreeNode* t) {cur = s;bool ans = false;TreeNode *Si = next();//Si為二叉樹的每個節點while(!ans && Si != NULL)//沒有答案,Si還沒遍歷完{ans = isSub(Si,t);//對每個節點開始,跟t進行比較Si = next();}return ans;}bool isSub(TreeNode *s, TreeNode *t)//比較Si與t的結構相同嗎?{if(!s && !t)return true;else if((!s && t) || (s && !t))return false;if(s->val == t->val)//相等,還要繼續比較子樹return isSub(s->left,t->left)&&isSub(s->right,t->right);return false;}TreeNode* next()//二叉樹迭代器{while(cur || !stk.empty()){while(cur){stk.push(cur);cur = cur->left;}temp = stk.top();cur = stk.top()->right;stk.pop();return temp;}return NULL;} };

  • 別人的解法總是很優雅
class Solution { public:bool isSubtree(TreeNode* s, TreeNode* t) {if (!s) return false;return isSubtree(s->left, t) || SameTree(s, t) || isSubtree(s->right, t);}bool SameTree(TreeNode* s, TreeNode* t) {if (!s && !t) return true;if (!s || !t) return false;return s->val == t->val && SameTree(s->left, t->left) && SameTree(s->right, t->right);} };

總結

以上是生活随笔為你收集整理的LeetCode 572. 另一个树的子树(二叉树迭代器)的全部內容,希望文章能夠幫你解決所遇到的問題。

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