题目
给定两棵二叉树,编写一个函数,判断它们是否相等。
如果两棵二叉树结构上一模一样,且每个结点值都相等,那么认定它们相等。
难度:容易
编程语言:C++
分析
程序框架为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <iostream> using namespace std; //Definition for a binary tree node. struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { public: bool isSameTree(TreeNode* p, TreeNode* q) { } };
|
又是简单的递归思路,先判断根结点值是否相等,相等则继续递归判断左子树和右子树是否相等,伪代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| bool isSameTree(TreeNode* p, TreeNode* q) { if (p、q 都空) return true; // 结构不同 if (p 非空 && q 空) return false; // 结构不同 if (p 空 && q 非空) return false; if (p、q 都非空) { // 值不同 if (p->val != q->val) return false; bool isSameLeft = isSameTree(p->left, q->left) bool isSameRight = isSameTree(p->right, q->right) if (isSameLeft && isSameRight) return true; return false; } }
|
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| #include <iostream> using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { public: bool isSameTree(TreeNode* p, TreeNode* q) { if (p == NULL && q == NULL) { return true; } if (p != NULL && q == NULL) { return false; } if (p == NULL && q != NULL) { return false; } else { if (p->val != q->val) { return false; } bool isSameLeft = isSameTree(p->left, q->left); bool isSameRight = isSameTree(p->right, q->right); if (isSameLeft && isSameRight) { return true; } return false; } } }; int main() { TreeNode p1(1); TreeNode p2(2); TreeNode p3(3); TreeNode p4(4); TreeNode p5(5); TreeNode p6(6); TreeNode p7(7); p1.left = &p2; p1.right = &p3; p2.left = &p4; p2.right = &p5; p3.left = &p6; p3.right = &p7; TreeNode q1(1); TreeNode q2(2); TreeNode q3(3); TreeNode q4(4); TreeNode q5(5); TreeNode q6(6); q1.left = &q2; q1.right = &q3; q2.left = &q4; q2.right = &q5; q3.left = &q6; Solution sol; bool isSame = sol.isSameTree(&p1, &q1); cout << isSame << endl; }
|
把 Solution 提交到 Leetcode,Accepted! :) 运行时间为 0ms。