給你一個二叉樹的根節(jié)點?root
, 檢查它是否軸對稱。
思路:示例 1:
輸入:root = [1,2,2,3,4,4,3] 輸出:true示例 2:
輸入:root = [1,2,2,null,3,null,3] 輸出:false
①題目要求是軸對稱,由此可以想到使用判定回文的方式來判別是否軸對稱
如果采用回文,首先需要實現(xiàn)二叉樹的層序遍歷,同時需要實現(xiàn)將層序遍歷的每一行進(jìn)行輸出。通過一個棧來實現(xiàn)數(shù)據(jù)的存放,棧中只保存同一行的數(shù)據(jù),再對每一行進(jìn)行判斷是否是回文。
層序遍歷的實現(xiàn)需要隊列的接口函數(shù),存放每一行的數(shù)據(jù)需要棧的接口函數(shù),所以程序功能可以實現(xiàn)但是代碼量較大,實現(xiàn)較為復(fù)雜
②采用遞歸的思路
子樹相同的條件是,兩個子樹都為空或兩個子樹都存在且關(guān)鍵字值相同。
左子樹的左孩子需要與右子樹的右孩子關(guān)鍵字值相同
左子樹的右孩子需要與右子樹的左孩子關(guān)鍵字值相同
代碼實現(xiàn):#include#include#includestruct TreeNode
{
int val;
struct TreeNode* left;
struct TreeNode* right;
};
bool _isSymmetric(struct TreeNode* root1, struct TreeNode* root2)
{
if (root1 == NULL && root2 == NULL)
{
return true;
}
if (root1 == NULL || root2 == NULL)
{
return false;
}
if (root1->val != root2->val)
{
return false;
}
return _isSymmetric(root1->left, root2->right) && _isSymmetric(root1->right, root2->left);
}
bool isSymmetric(struct TreeNode* root)
{
if (root == NULL)
{
return true;
}
return _isSymmetric(root->left, root->right);
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
分享題目:樹--對稱二叉樹-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://aaarwkj.com/article16/ipjdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、做網(wǎng)站、網(wǎng)站建設(shè)、小程序開發(fā)、微信小程序、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)