#yyds干貨盤點# LeetCode程序員面試金典:檢查子樹

2022-12-26 18:29:18 來源:51CTO博客


(資料圖)

題目:

檢查子樹。你有兩棵非常大的二叉樹:T1,有幾萬個節點;T2,有幾萬個節點。設計一個算法,判斷 T2 是否為 T1 的子樹。

如果 T1 有這么一個節點 n,其子樹與 T2 一模一樣,則 T2 為 T1 的子樹,也就是說,從節點 n 處把樹砍斷,得到的樹與 T2 完全相同。

注意:此題相對書上原題略有改動。

示例1:

輸入:t1 = [1, 2, 3], t2 = [2] 輸出:true

示例2:

輸入:t1 = [1, null, 2, 4], t2 = [3, 2] 輸出:false

代碼實現:

class Solution {    public boolean checkSubTree(TreeNode t1, TreeNode t2) {        StringBuilder str1 = subsequence(t1);        StringBuilder str2 = subsequence(t2);        return str1.indexOf(str2.toString())!=-1;    }    public StringBuilder subsequence(TreeNode root){        StringBuilder str=new StringBuilder();        Deque stack=new LinkedList<>();        stack.push(root);        while(!stack.isEmpty()){            TreeNode pop = stack.pop();            if(pop==null){                str.append("x");                continue;            }            str.append(pop.val);            stack.push(pop.right);            stack.push(pop.left);        }        return str;    }}

標簽: 設計一個 一模一樣 完全相同

上一篇:全球微資訊!Rancher RFO 正式 GA
下一篇:當前播報:#yyds干貨盤點# LeetCode程序員面試金典:二叉搜索樹序列