日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

(剑指Offer)面试题18:树的子结构

發布時間:2025/6/15 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (剑指Offer)面试题18:树的子结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:

輸入兩棵二叉樹A和B,判斷B是不是A的子結構。

二叉樹結構定義如下:

struct TreeNode{int val;TreeNode* left;TreeNode* right; };

思路:

判斷二叉樹B是否為二叉樹A的子樹:

首先判斷二叉樹A的根節點值是否等于二叉樹B的根節點值;

如果是,則繼續往下遍歷,判斷二叉樹A的左子節點和二叉樹B的左子結點以及二叉樹A的右子節點和二叉樹B的右子節點是否都相等,直到葉子節點;(遞歸)

return IsSubtree(pRoot1->left,pRoot2->left) && IsSubtree(pRoot1->right,pRoot2->right);

如果不是,則判斷二叉樹B是否為二叉樹A左子樹的子樹或者二叉樹B是否為二叉樹A右子樹的子樹;(遞歸)

result=HasSubtree(pRoot1->left,pRoot2); result=HasSubtree(pRoot1->right,pRoot2);

代碼:

struct TreeNode{int val;TreeNode* left;TreeNode* right; };bool IsSubtree(TreeNode* pRoot1,TreeNode* pRoot2){if(pRoot2==NULL)return true;if(pRoot1==NULL)return false;if(pRoot1->val!=pRoot2->val)return false;return IsSubtree(pRoot1->left,pRoot2->left) && IsSubtree(pRoot1->right,pRoot2->right); }bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){bool result=false;if(pRoot1!=NULL && pRoot2!=NULL){if(pRoot1->val==pRoot2->val)result=IsSubtree(pRoot1,pRoot2);if(!result)result=HasSubtree(pRoot1->left,pRoot2);if(!result)result=HasSubtree(pRoot1->right,pRoot2);}return result; }

在線測試OJ:

http://www.nowcoder.com/books/coding-interviews/6e196c44c7004d15b1610b9afca8bd88?rp=1

AC代碼:

class Solution { public:bool IsSubtree(TreeNode* pRoot1,TreeNode* pRoot2){if(pRoot2==NULL)return true;if(pRoot1==NULL)return false;if(pRoot1->val!=pRoot2->val)return false;return IsSubtree(pRoot1->left,pRoot2->left) && IsSubtree(pRoot1->right,pRoot2->right);}bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){bool result=false;if(pRoot1!=NULL && pRoot2!=NULL){if(pRoot1->val==pRoot2->val)result=IsSubtree(pRoot1,pRoot2);if(!result)result=HasSubtree(pRoot1->left,pRoot2);if(!result)result=HasSubtree(pRoot1->right,pRoot2);}return result;} };

  

總結

以上是生活随笔為你收集整理的(剑指Offer)面试题18:树的子结构的全部內容,希望文章能夠幫你解決所遇到的問題。

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