牛客網劍指offer第十七題解答及知識點
阿新 • • 發佈:2021-02-19
技術標籤:牛客網-劍指offer題解
問題:輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)。
解答1:
知識點:
1.二叉樹的簡介。
二叉樹是n個有限元素的集合,該集合或者為空、或者由一個稱為根(root)的元素及兩個不相交的、被分別稱為左子樹和右子樹的二叉樹組成,是有序樹。當集合為空時,稱該二叉樹為空二叉樹。在二叉樹中,一個元素也稱作一個結點。
二叉樹(binary tree)是指樹中節點的度不大於2的有序樹,它是一種最簡單且最重要的樹。二叉樹的遞迴定義為:二叉樹是一棵空樹,或者是一棵由一個根節點和兩棵互不相交的,分別稱作根的左子樹和右子樹組成的非空樹;左子樹和右子樹又同樣都是二叉樹 [2] 。
二叉樹的形態:
public class Solution {
//遍歷
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if(root1 == null || root2 == null){
return false;
}
if(root1.val == root2.val){
if(HasSubtree1(root1,root2)){
return true;
}
}
//遍歷左右孩子,樹root2是樹root1左子樹的子結構,樹root2是樹root1右子樹的子結構
return HasSubtree(root1.left,root2) || HasSubtree(root1.right,root2);
}
//判斷是否為子結構
public boolean HasSubtree1(TreeNode tree1,TreeNode tree2) {
if(tree2 == null){
return true;
}
if (tree1 == null){
return false;
}
if(tree1.val == tree2.val){
return HasSubtree1(tree1.right,tree2.right) && HasSubtree1(tree1.left,tree2.left);
}else{
return false;
}
}
}