給定的結構是hassubtree(root1,root2)
即判斷root1做根的樹中是否含有root2節點做根的樹。
二叉樹的問題基本可以確定是用遞迴了,肯定是先遞迴遍歷前者找到與右邊樹的根相等的節點,然後再判斷對應子樹。
即遍歷前樹,找到乙個節點和root2相等,那麼就把其作為根的子樹列為考慮物件,接下來用另乙個方法判斷是不是。是就直接結束了,不是還要繼續向下找下乙個考慮物件而這裡很顯然用遞迴就可以了,這個節點不是,就去找其左右子樹即可。
public boolean hassubtree(treenode root1,treenode root2)
else
}else
}return result;
}接下來是如果當前根與root2相等時要做的是不是子樹的判斷,即找到考慮物件後如何確定是不是要的子樹:
也是相同的思路,先設個flag,後面就是給true的演算法。
public boolean issubtree(treenode root1,treenode root2)
else
if(root2.right == null)
else}}
return result;
}按照寫**的思路來說把,我們先考慮的是
issubtree(root1.left,root2.left);
和issubtree(root1.right,root2.right)
這兩句話,因為這兩句話的意思就是檢查兩者左子樹和右子樹相等與否,如果都相等就是true的情況。
然後設定出口,出口肯定是遍歷沒的情況,但一定是root2遍歷沒才行。於是有了兩個if else.這裡別忘了判斷右邊的
時候並上left的結果,因為必須是兩邊都ok才能返回true的。
這樣向下遍歷就完成了,最外層的root1!=null是為了防止空指標異常,如果不加,為空後還要繼續.left就報錯了。
完整**:
package exercise1;
public class solution
else
}else
}return result;
}public boolean issubtree(treenode root1,treenode root2)
else
if(root2.right == null)
else}}
return result;}}
二叉樹 判斷二叉樹是否為完全二叉樹
問題描述 判斷一棵二叉樹是否為完全二叉樹。知識點 完全二叉樹是指除二叉樹的最後一層外,其他各層的節點數達到最大個數,且最後一層的葉節點從左到右連續存在,只缺右側若干節點。演算法實現 class node is complete binary tree public static boolean is...
判斷二叉樹是否為平衡二叉樹
一 線性思維 遍歷每個節點都時候,求左右子樹的深度,如果左右子樹深度相差不超過1,繼續遞迴遍歷左右節點,此種方法會重複遍歷,時間效率不高 is balanced t if t is null return true left treedepth t.left right treedepth t.ri...
判斷二叉樹是否為平衡二叉樹
題目 平衡二叉樹的性質為 要麼是一棵空樹,要麼任何乙個節點的左右子樹高度差的絕對值不超過1。給定一棵二叉樹的頭結點head,判斷這棵二叉樹是否為平衡二叉樹。要求 如果二叉樹的節點數為n,要求時間複雜度為o n 判斷二叉樹是否為二叉樹 public boolean isbalance node hea...