LeetCode OJ 之 Same Tree (相同树的判断)

来源:互联网 发布:mac升级os sierra失败 编辑:程序博客网 时间:2024/06/07 06:31

题目:

Given two binary trees, write a function to check if they are equal or not.

Two binary trees are considered equal if they are structurally identical and the nodes have the same value.

给定两棵树,写一个函数判断它们是否相等。

两棵树相等是指它们结构一致并且结点值相等。

代码递归版:

/** * Definition for binary tree * 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->val == q->val)//当前结点值相等,继续向下遍历否则返回假            return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);        else            return false;                }};

迭代版:

/** * Definition for binary tree * 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)     {        stack<TreeNode*> s;//把q,q的结点成对入栈,再成对出栈进行比较        s.push(p);        s.push(q);        while(!s.empty())         {        p = s.top(); //取出栈顶        s.pop();     //删除栈顶        q = s.top();         s.pop();        if (!p && !q) //p,q都为空,继续遍历,出栈判断            continue;        if (!p || !q) //p,q只有一个为空,则返回假             return false;        if (p->val != q->val) //p,q不等,返回假            return false;        s.push(p->left);        s.push(q->left);        s.push(p->right);        s.push(q->right);        }        return true;                }};



0 0