class SymmetricTreeDemo
{
static void Main()
{
// 对称二叉树
TreeNode root1 = new TreeNode(1)
{
left = new TreeNode(2) { left = new TreeNode(3), right = new TreeNode(4) },
right = new TreeNode(2) { left = new TreeNode(4), right = new TreeNode(3) }
};
// 非对称二叉树
TreeNode root2 = new TreeNode(1)
{
left = new TreeNode(2) { right = new TreeNode(3) },
right = new TreeNode(2) { right = new TreeNode(3) }
};
Console.WriteLine("root1是否对称: " + IsSymmetric(root1)); // true
Console.WriteLine("root2是否对称: " + IsSymmetric(root2)); // false
}
static bool IsSymmetric(TreeNode root)
{
if (root == null) return true;
return CheckSymmetric(root.left, root.right);
}
static bool CheckSymmetric(TreeNode left, TreeNode right)
{
if (left == null && right == null) return true;
if (left == null || right == null) return false;
return left.val == right.val
&& CheckSymmetric(left.left, right.right)
&& CheckSymmetric(left.right, right.left);
}
}
实例5
C#复制代码
class DepthDemo
{
static void Main()
{
TreeNode root = new TreeNode(1)
{
left = new TreeNode(2) { left = new TreeNode(4) },
right = new TreeNode(3)
};
Console.WriteLine("最大深度: " + MaxDepth(root)); // 输出: 3
}
static int MaxDepth(TreeNode root)
{
if (root == null) return 0;
return Math.Max(MaxDepth(root.left), MaxDepth(root.right)) + 1;
}
}
实例6
C#复制代码
class PathSumDemo
{
static void Main()
{
TreeNode root = new TreeNode(5)
{
left = new TreeNode(4) { left = new TreeNode(11) { left = new TreeNode(7), right = new TreeNode(2) } },
right = new TreeNode(8) { left = new TreeNode(13), right = new TreeNode(4) { right = new TreeNode(1) } }
};
Console.WriteLine("是否存在和为22的路径: " + HasPathSum(root, 22)); // true
}
static bool HasPathSum(TreeNode root, int targetSum)
{
if (root == null) return false;
if (root.left == null && root.right == null)
return root.val == targetSum;
return HasPathSum(root.left, targetSum - root.val)
|| HasPathSum(root.right, targetSum - root.val);
}
}