1. 程式人生 > 其它 >牛客網劍指offer第十七題解答及知識點

牛客網劍指offer第十七題解答及知識點

技術標籤:牛客網-劍指offer題解

問題:輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)。
解答1:
知識點:
1.二叉樹的簡介。
二叉樹是n個有限元素的集合,該集合或者為空、或者由一個稱為根(root)的元素及兩個不相交的、被分別稱為左子樹和右子樹的二叉樹組成,是有序樹。當集合為空時,稱該二叉樹為空二叉樹。在二叉樹中,一個元素也稱作一個結點。
二叉樹(binary tree)是指樹中節點的度不大於2的有序樹,它是一種最簡單且最重要的樹。二叉樹的遞迴定義為:二叉樹是一棵空樹,或者是一棵由一個根節點和兩棵互不相交的,分別稱作根的左子樹和右子樹組成的非空樹;左子樹和右子樹又同樣都是二叉樹 [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; } } }