LeetCode 101. Symmetric Tree

来源:互联网 发布:smap关系 知乎 编辑:程序博客网 时间:2024/05/29 19:17

Description

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree [1,2,2,3,4,4,3] is symmetric:

    1   / \  2   2 / \ / \3  4 4  3

But the following[1,2,2,null,3,null,3] is not:

    1   / \  2   2   \   \   3    3

Solution

利用深度优先搜索DFS来递归。

#include <iostream>using namespace std;struct TreeNode {    int val;    TreeNode *left;    TreeNode *right;    TreeNode(int x): val(x), left(NULL), right(NULL) {}};void pre_create_tree(TreeNode* &bt) {    int n;    cin >> n;    if (n == -1) bt = NULL;    else {        bt = new TreeNode(n);        pre_create_tree(bt->left);        pre_create_tree(bt->right);    }}bool isEqual(TreeNode* p, TreeNode* q) {    if (!p && !q) return true;    if ((p && !q) || (!p && q) || (p->val != q->val)) return false;    if (p->val == q->val) return isEqual(p->left, q->left) && isEqual(p->right, q->right);}bool issymmetric(TreeNode* left, TreeNode* right) {    if (!left && !right) return true;    if (left && !right || !left && right || left->val != right->val) return false;    return issymmetric(left->left, right->right) && issymmetric(left->right, right->left);}bool isSymmetric(TreeNode* root) {    if (!root) return true;    return issymmetric(root->left, root->right);}void levorder (TreeNode* bt) {    TreeNode* q[30];    int front = 0,rear = 0;    TreeNode* p;    if (bt != NULL) {        rear = (rear+1) % 30;        q[rear] = bt;    }    while (front != rear) {        front = (front+1) % 30;        p=q[front];        cout << p->val <<' ';        if (p->left != NULL) {            rear = (rear+1) % 30;            q[rear] = p->left;        }        if (p->right != NULL) {            rear = (rear+1) % 30;            q[rear] = p->right;        }    }}void printbtree(TreeNode* bt) {    if (bt==NULL) return;    else {        cout << bt->val;        if (bt->left!=NULL||bt->right!=NULL) {            cout << '(';            printbtree(bt->left);            if (bt->right!=NULL) cout << ',';            printbtree(bt->right);            cout << ')';        }    }}int main() {    TreeNode* bt1;    //TreeNode* bt2;    pre_create_tree(bt1);    //pre_create_tree(bt2);    levorder(bt1);    cout << endl;    //levorder(bt2);    //cout << endl;    //cout << isEqual(bt1, bt2);    //cout << endl;    cout << isSymmetric(bt1);    return 0;}