题目:
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3] 输出: true
示例 2:
输入: 1 1 / \ 2 2 [1,2], [1,null,2] 输出: false
示例 3:
输入: 1 1 / \ / \ 2 1 1 2 [1,2,1], [1,1,2] 输出: false
解题:
C语言
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isSameTree(struct TreeNode* p, struct TreeNode* q){
if (p != 0 && q != 0)
{
if (p->val != q->val) return false;
if (!isSameTree(p->left, q->left)) return false;
if (!isSameTree(p->right, q->right)) return false;
return true;
}
else if (p == 0 && q == 0)
{
return true;
}
return false;
}
C#语言一
/**
* 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) {
if(p!=null && q != null)
{
if (p.val != q.val) return false;
if (!IsSameTree(p.left, q.left)) return false;
if (!IsSameTree(p.right, q.right)) return false;
return true;
}
else if (p == null && q == null)
{
return true;
}
return false;
}
}
C#语言二
/**
* 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 {
List<int?> t1 = new List<int?>();
List<int?> t2 = new List<int?>();
public bool IsSameTree(TreeNode p, TreeNode q)
{
PreOrderTraverse(p);
PreOrderTraverse2(q);
if (t1.Count != t2.Count) return false;
for(int i = 0; i < t1.Count; i++)
{
if (t1[i] != t2[i]) return false;
}
return true;
}
void PreOrderTraverse(TreeNode t)
{
if (t != null)
{
t1.Add(t.val);
PreOrderTraverse(t.left);
PreOrderTraverse(t.right);
}
t1.Add(null);
}
void PreOrderTraverse2(TreeNode t)
{
if (t != null)
{
t2.Add(t.val);
PreOrderTraverse2(t.left);
PreOrderTraverse2(t.right);
}
t2.Add(null);
}
}