41.二叉樹的子結構

題目:輸入兩棵二叉樹A,B,判斷B是不是A的子結構。

解析:
①從二叉樹A的根節點root開始,判斷此時二叉樹B是否以root開始且以下結點與二叉樹A是否相等,用變量ret保存返回的布爾變量(爲什麼不直接return,因爲B可能從A根節點的右孩子開始爲其子結構或左孩子開始爲其子結構);
②如果A樹有右孩子,將右孩子當做B樹的根節點,判斷B樹是否以此節點爲開始是A樹的子結構;同樣的如果A樹有左孩子,類似操作;
③繼續②中的步驟。。。得出最終判斷;

public boolean HasSubtree(TreeNode root1,TreeNode root2) {
  boolean ret = false;
  if (root1 != null && root2 != null){
     //判斷從root1當前結點開始,root2是否爲root1的子樹
   if (root1.val == root2.val){
    ret = issubTree(root1,root2);
   }
     //如果不是,則從root1的左節點開始判斷root2是否其子樹
   if (!ret){
    ret = HasSubtree(root1.left, root2);
   }
     //如果不是,則從root1的右結點開始判斷root2是否爲其子樹
   if (!ret){
    ret = HasSubtree(root1.right, root2);
   }
  }
  return ret;
 }
 public boolean issubTree(TreeNode root1, TreeNode root2){
  if (root1!=null && root2==null)  return false;
  if (root1==null && root2==null)     return true;//只有當結點一致才認爲B是A的子結構
  if (root1==null && root2!=null)     return false;
  if (root1.val != root2.val)  return false;
  return issubTree(root1.left,root2.left) && issubTree(root1.right,root2.right);
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章