樹的子結構

2021-07-03 12:25:45 字數 1255 閱讀 3109

來自《劍指offer》的面試題18。

題目:輸入兩棵二叉樹a和b,判斷b是不是a的子結構。二叉樹節點定義如下:

public class treenode 

}

思路分析:首先,在tree1中找到和tree2的根節點的值一樣的結點r;

然後,再判斷tree1中以r為根結點的子樹是不是包含和tree2一樣的結構。

分析示例:

解決思路**:

這裡兩處判斷均使用了遞迴,詳見**。

public class solution 

if (!result)

if (!result)

} return result;

} public boolean dostree1hastree2(treenode root1, treenode root2)

if (root1 == null)

if (root1.val != root2.val)

return dostree1hastree2(root1.left, root2.left)

&& dostree1hastree2(root1.right, root2.right); // 遞迴判斷左右子樹

}}

測試**:

// 進行測試

public class main

root = new treenode(integer.parseint(val));

root.left = createtree(root.left);

root.right = createtree(root.right);

return root;

} public static void main(string args)

}

測試資料為:

8 8 9 # # 2 4 # # 7 # # 7 # #

8 9 # # 2 # #

執行結果:

樹的子結構

題目 輸入兩顆二叉樹a和b 判斷b是不是a的子結構 二叉樹結點定義如下 首先 從樹根開始遍歷樹 如果結點與 b的根結點值相同 則繼續遍歷a的左子樹 以及b的左子樹 如果左子樹相同則遍歷a的右子樹以及b的左子樹 如果左右子樹都相同則 a包含b 如果結點與b的根節點值不同 則遍歷到a的左孩子 重複上述判...

樹的子結構

輸入兩顆二叉樹a,b,判斷b是不是a的子結構 思路 1 先判斷兩棵樹是否為空,是則沒有子樹 2 當兩棵樹為非空時,判斷當前的兩個根節點是否為子樹關係,若值相等,則繼續判斷左右子樹是否也對應相等 3 當根節點非子樹關係時,再判斷a樹的左右子樹和b樹是否有子樹。public class treenode...

樹的子結構

題目描述 輸入兩顆二叉樹a,b,判斷b是不是a的子結構。思路 如果a樹種乙個節點和b樹根節點相同,就遞迴比較a和b的左右子樹節點是否相同。遞迴演算法 public boolean hassubtree treenode root1,treenode root2 public boolean issu...