Task19——相同的樹

題目:

給定兩個二叉樹,編寫一個函數來檢驗它們是否相同。

如果兩個樹在結構上相同,並且節點具有相同的值,則認爲它們是相同的。

示例 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);
        }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章