1. 程式人生 > >28、輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)

28、輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)

eno 技術分享 進行 結構 一個點 left courier mage new

題目描述

輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構) 思路: 1、當Tree1和Tree2都不為零的時候,才進行比較。否則直接返回false 2、
2.1
如果找到了對應Tree2的根節點的點,
以這個根節點為為起點判斷是否包含Tree2

2.2
如果找不到,那麽就再去root的左孩子當作起點,去判斷時候包含Tree2
2.3
如果還找不到,那麽就再去root的右孩子當作起點,去判斷時候包含Tree2
 1 public class Solution {
 2     public static boolean HasSubtree(TreeNode root1, TreeNode root2) {
3 boolean result = false; 4 //當Tree1和Tree2都不為零的時候,才進行比較。否則直接返回false 5 if (root2 != null && root1 != null) { 6 //如果找到了對應Tree2的根節點的點 7 if(root1.val == root2.val){ 8 //以這個根節點為為起點判斷是否包含Tree2 9 result = doesTree1HaveTree2(root1,root2);
10 } 11 //如果找不到,那麽就再去root的左孩子當作起點,去判斷時候包含Tree2 12 if (!result) { 13 result = HasSubtree(root1.left,root2); 14 } 15 16 //如果還找不到,那麽就再去root的右孩子當作起點,去判斷時候包含Tree2 17 if (!result) { 18 result = HasSubtree(root1.right,root2);
19 } 20 } 21 //返回結果 22 return result; 23 } 24 25 public static boolean doesTree1HaveTree2(TreeNode node1, TreeNode node2) { 26 //如果Tree2已經遍歷完了都能對應的上,返回true 27 if (node2 == null) { 28 return true; 29 } 30 //如果Tree2還沒有遍歷完,Tree1卻遍歷完了。返回false 31 if (node1 == null) { 32 return false; 33 } 34 //如果其中有一個點沒有對應上,返回false 35 if (node1.val != node2.val) { 36 return false; 37 } 38 39 //如果根節點對應的上,那麽就分別去子節點裏面匹配 40 return doesTree1HaveTree2(node1.left,node2.left) && doesTree1HaveTree2(node1.right,node2.right); 41 } 42 }

技術分享

28、輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)