題目:輸入兩棵二叉樹A和B拂封,判斷B是不是A的子結構换吧。
/// <summary>
/// 遍歷樹判斷
/// </summary>
/// <param name="A"></param>
/// <param name="B"></param>
/// <returns></returns>
public bool IsSubStructure(TreeNode A, TreeNode B)
{
var result = false;
if (A != null && B != null)
{
if (A.val == B.val)
{
result = DoesTree1HaveTree2(A, B);
}
if (!result)
result = IsSubStructure(A.left, B);
if (!result)
result = IsSubStructure(A.right, B);
}
return result;
}
/// <summary>
/// 找到想等根節(jié)點后泌霍,判斷是否是子樹
/// </summary>
/// <param name="A"></param>
/// <param name="B"></param>
/// <returns></returns>
public bool DoesTree1HaveTree2(TreeNode A, TreeNode B)
{
if (B == null) return true;
if (A == null) return false;
if (A.val != B.val) return false;
return DoesTree1HaveTree2(A.left, B.left) && DoesTree1HaveTree2(A.right, B.right);
}
public class TreeNode
{
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int x)
{
val = x;
}
}
第一步在樹A中找到和B的根結點的值一樣的結點R剪况,第二步再判斷樹A中以R為根結點的子樹是不是包含和樹B一樣的結構教沾。