有兩個不同大小的二進位制樹: t1 有上百萬的節點; t2 有好幾百的節點。請設計一種演算法,判定 t2 是否為 t1的子樹。我的思路主要是運用遞迴的思想,具體流程分為以下幾步:注意事項:若 t1 中存在從節點 n 開始的子樹與 t2 相同,我們稱 t2 是 t1 的子樹。也就是說,如果在 t1 節點 n 處將樹砍斷,砍斷的部分將與 t2 完全相同。
//上面應有流程圖的...
/**
* definition of treenode:
* public class treenode
* }*/public
class
solution
if (t2 == null)
if (t1.val == t2.val)
else
else}}
else
else}}
}
然後提交**,執行到了(80%),也就是測試集如下時,返回來了個true,其實答案是false(答案來自lintcode,未驗證)。
其實這道題目挺簡單,但是遇到這個問題一下子就激起我的好奇心了,除錯了很久,改if啊改return啊改了半天,**搞亂了連80%都跑不到了…
//訓練集
,
/**
* definition of treenode:
* public class treenode
* }*/public
class
solution
if (t1 != null && t2 != null)
return result;
}public
boolean
ispart(treenode root1, treenode root2)
}
可見他設定了兩個函式,ispart的目的是定根對比子樹,issubtree是定子樹對比根,也就是說如果根節點的val相等時,他就跳入到ispart中進行計算,若ispart返回false就再對其子樹進行計算。
分開了這兩部分,他的**比我的優雅的多,這也堅定了我刷完lintcode後還是回去刷leetcode的決心,後者至少有論壇可以看看大家的簡潔**。
然而在我執行後,結果還是一樣的,卡在了80%,訓練集還是之前的『999』訓練集。
又找了會解決方案後在這道題目上已經浪費很長時間了…只能希望之後面tx不會碰到這種尷尬的情況。
不說了 上**
/**
* definition of treenode:
* public class treenode
* }*/public
class
solution
boolean lft = issubtree(t1.left,t2);
if(lft==true)
return
true;
boolean rit = issubtree(t1.right,t2);
return rit;
}public
boolean
isequal(treenode t1,treenode t2)
return
false;
}}
提交後居然ac了,那麼問題出在**呢?
我覺得是出在判斷條件:
if(t1==null && t2==null)
return
true;
if(t1==null)
return
false;
if(t2==null)
return
true;
根據這個思路修改了我的**後,居然還是不能ac…
不錯 還是有點收穫的
待續,我再去研究下。
if(t2==nullptr && t1==nullptr)
return
true;
第二個函式必須在t2、t1同時為null時才返回true,否則ac不了,下面ac的**(c++)
bool issubtree(treenode *t1, treenode *t2)
if (t1 == nullptr)
if (t1->val == t2->val)
if (!result)
if (!result)
return result;
} bool hassubtree(treenode *t1, treenode *t2)
return
false;
}
一次過 Lintcode 596 最小子樹
給一棵二叉樹,找到和為最小的子樹,返回其根節點。例1 輸入 1 5 2 0 2 4 5 輸出 1例2 輸入 1輸出 1lintcode會列印根節點為你返回節點的子樹。保證只有一棵和最小的子樹並且給出的二叉樹不是一棵空樹。解題思路1 採用全域性變數記錄最小和值以及最小和對應的根節點,然後遞迴求和判斷即...
出現次數最多的子樹元素和
給出二叉樹的根,找出出現次數最多的子樹元素和。乙個結點的子樹元素和定義為以該結點為根的二叉樹上所有結點的元素之和 包括結點本身 然後求出出現次數最多的子樹元素和。如果有多個元素出現的次數相同,返回所有出現次數最多的元素 不限順序 示例 1 輸入 5 2 3 返回 2,3,4 所有的值均只出現一次,以...
lintcode1165 另乙個樹的子樹
給定兩個非空二叉樹s和t,檢查樹t是否和樹s的乙個子樹具有完全相同的結構和節點值。s的子樹是乙個由s中的乙個節點和該節點的後續組成的樹。樹s本身也可以被視為自己的乙個子樹。樣例 樣例1 給出樹s 3 45 12 給出樹t 4 12 返回true,因為t和s的子樹具有完全相同的結構和節點值。樣例2 給...