LeetCode100.相同的树
题目
代码
一,递归
时间复杂度:O(n)
空间复杂度:O(n)
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int x) { val = x; }
* }
*/
public class Solution
{
public bool IsSameTree(TreeNode p, TreeNode q)
{
// p and q are both null
if (p == null && q == null)
return true;
// one of p and q is null
if (q == null || p == null)
return false;
if (p.val != q.val)
return false;
return IsSameTree(p.right, q.right) && IsSameTree(p.left, q.left);
}
}
二,迭代
时间复杂度:O(n)
空间复杂度:O(n)
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int x) { val = x; }
* }
*/
public class Solution
{
public bool IsSameTree(TreeNode p, TreeNode q)
{
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.Push(q);
stack.Push(p);
TreeNode temp_q;
TreeNode temp_p;
while (stack.Count != 0)
{
temp_p = stack.Pop();
temp_q = stack.Pop();
if (temp_p == null && temp_q == null)
continue;
else if (temp_p != null && temp_q == null)
return false;
else if (temp_p == null && temp_q != null)
return false;
else if (temp_p.val != temp_q.val)
return false;
else
{
stack.Push(temp_p.right);
stack.Push(temp_q.right);
stack.Push(temp_p.left);
stack.Push(temp_q.left);
}
}
return true;
}
}