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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

剑指offer:面试题28. 对称的二叉树

發(fā)布時(shí)間:2023/11/27 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剑指offer:面试题28. 对称的二叉树 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目:對(duì)稱的二叉樹(shù)

請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),用來(lái)判斷一棵二叉樹(shù)是不是對(duì)稱的。如果一棵二叉樹(shù)和它的鏡像一樣,那么它是對(duì)稱的。

例如,二叉樹(shù)?[1,2,2,3,4,4,3] 是對(duì)稱的。

????1
???/ \
??2 ??2
?/ \ / \
3 ?4 4 ?3
但是下面這個(gè)?[1,2,2,null,3,null,3] 則不是鏡像對(duì)稱的:

????1
???/ \
??2 ??2
???\ ??\
???3 ???3

示例 1:

輸入:root = [1,2,2,3,4,4,3]
輸出:true

示例 2:

輸入:root = [1,2,2,null,3,null,3]
輸出:false

解題:

方法一:遞歸

?T:O(n) S:O(n)

鏡像二叉樹(shù)滿足3個(gè)條件:

  • 根節(jié)點(diǎn)相同
  • 左孩子 與 右孩子 互為鏡像二叉樹(shù)
  • 右孩子 與 左孩子 互為鏡像二叉樹(shù)
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:bool isMirror(TreeNode* t1, TreeNode* t2) {if (!t1 && !t2) return true;if (!t1 || !t2) return false;return (t1->val == t2->val) && isMirror(t1->left, t2->right) && isMirror(t1->right, t2->left);}bool isSymmetric(TreeNode* root) {return isMirror(root, root);}
};

方法二:非遞歸

T:O(n) S:O(n)
兩個(gè)指針從根節(jié)點(diǎn)出發(fā),一個(gè)指針(根 左 右)的順序進(jìn)行遍歷,一個(gè)指針(根 右 左)的順序進(jìn)行便來(lái)遍歷。 看每個(gè)時(shí)刻指針指的是否是相同值得節(jié)點(diǎn)。
PS:不能先求出兩個(gè)序列, 再比較兩個(gè)序列是否相等。 先序遍歷是不能唯一確定一顆二叉樹(shù)的

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:bool isSymmetric(TreeNode* root) {stack<TreeNode*> stk1, stk2;TreeNode *p1, *p2;p1 = p2 = root;while (p1 || !stk1.empty()) {while (p1) {if (!p2 || p1->val != p2->val) return false;  // 這里p1不可能為null, 所以還要檢查p2是否為空,p2是null則返回falsestk1.push(p1);stk2.push(p2);p1 = p1->left;  // p1一直往左遍歷p2 = p2->right; // p2一直往右遍歷}if (p2) return false;  // 這里p1是null, 所以檢查p2是否為空, p2不空則返回falsep1 = stk1.top(); stk1.pop();p1 = p1->right;p2 = stk2.top(); stk2.pop();p2 = p2->left;}return true; }
};

?

總結(jié)

以上是生活随笔為你收集整理的剑指offer:面试题28. 对称的二叉树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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