剑指:树的子结构
題目描述
輸入兩棵二叉樹 A、B,判斷 B 是不是 A 的子結構。
我們規定空樹不是任何樹的子結構。
樣例
樹 A:
?8
?/ \
8 7
?/ \
9 2
?/ \
4 7
樹 B:
?8
?/ \
9 2
返回 true ,因為 B 是 A 的子結構。
?
解法
遞歸方式遍歷:
- 在樹 A 中找到和樹 B 的根結點值一樣的結點 R;
- 判斷樹 A 以 R 為根結點的子樹是否包含與樹 B 一樣的結構。
?
package demo;public class Solution {//Definition for a binary tree node.public static class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; }}public static boolean hasSubTree(TreeNode pRoot1, TreeNode pRoot2){boolean res = false;if(pRoot1 != null && pRoot2 != null){if(pRoot1.val == pRoot2.val){res = isSame(pRoot1, pRoot2);}if(!res){//res==falseres = hasSubTree(pRoot1.left, pRoot2);}if(!res){res = hasSubTree(pRoot1.right, pRoot2);}}return res;}private static boolean isSame(TreeNode root1, TreeNode root2) {if(root2==null){return true;}if(root1==null || root1.val !=root2.val){return false;}return isSame(root1.left, root2.left) && isSame(root1.right, root2.right);}public static void main(String[] args) {TreeNode R1 = new TreeNode(8); TreeNode n2 = new TreeNode(8); R1.left = n2; TreeNode n3 = new TreeNode(7); R1.right = n3;TreeNode n4 = new TreeNode(9); n2.left = n4;TreeNode n5 = new TreeNode(2); n2.right = n5;TreeNode n6 = new TreeNode(4); n5.left = n6;TreeNode n7 = new TreeNode(7); n5.right = n7;TreeNode R2 = new TreeNode(8); TreeNode ns2 = new TreeNode(9); R2.left=ns2;TreeNode ns3 = new TreeNode(2); R2.right=ns3;boolean t = hasSubTree(R1, R2);System.out.println(t);} }?
轉載于:https://www.cnblogs.com/lisen10/p/11183392.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: 态密度(PDOS)曲线和声子色散曲线(P
- 下一篇: 学习笔记——本地事务ACID四大特性