100. Same Tree和判断一个树是不是对称的思想一样
2017-01-12 16:49
441 查看
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.
Subscribe to see which companies asked this question
1.递归的代码
更简洁的递归代码:
2.非递归的代码
更简洁的代码:
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
Subscribe to see which companies asked this question
1.递归的代码
bool isSameTree(TreeNode* p, TreeNode* q) { if(p == NULL && q == NULL) return true; else if(p == NULL || q == NULL) return false; if(p->val != q->val) return false; return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right); }
更简洁的递归代码:
bool isSameTree(TreeNode* p, TreeNode* q) { if (p == NULL || q == NULL) return (p == q); return (p->val == q->val && isSameTree(p->left, q->left) && isSameTree(p->right, q->right)); }
2.非递归的代码
bool isSameTree(TreeNode* p, TreeNode* q) { if(p == NULL && q == NULL) return true; else if(p == NULL || q == NULL) return false; queue<TreeNode*> quep; queue<TreeNode*> queq; quep.push(p); queq.push(q); while(!quep.empty() && !queq.empty()) { TreeNode* tempp = quep.front(); TreeNode* tempq = queq.front(); quep.pop(); queq.pop(); if(tempp->val != tempq->val) { return false; } if(tempp->left != NULL && tempq->left != NULL) { quep.push(tempp->left); queq.push(tempq->left); } else if((tempp->left == NULL && tempq->left != NULL) || (tempp->left != NULL && tempq->left == NULL)) return false; if(tempp->right != NULL && tempq->right != NULL) { quep.push(tempp->right); queq.push(tempq->right); } else if((tempp->right == NULL && tempq->right != NULL) || (tempp->right != NULL && tempq->right == NULL)) return false; } if(!quep.empty() || !queq.empty()) return false; return true; }
更简洁的代码:
bool isSameTree(TreeNode* p, TreeNode* q) { if(p == NULL && q == NULL) return true; else if(p == NULL || q == NULL) return false; queue<TreeNode*> quep; queue<TreeNode*> queq; quep.push(p); queq.push(q); while(!quep.empty() && !queq.empty()) { TreeNode* tempp = quep.front(); TreeNode* tempq = queq.front(); quep.pop(); queq.pop(); if(tempp->val != tempq->val) return false; if(tempp->left != NULL) quep.push(tempp->left); if (tempq->left != NULL) queq.push(tempq->left); if(quep.size() != queq.size()) return false; if(tempp->right != NULL) quep.push(tempp->right); if(tempq->right != NULL) queq.push(tempq->right); if(quep.size() != queq.size()) return false; } if(!quep.empty() || !queq.empty()) return false; return true; }
相关文章推荐
- 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
- 判断一个字符串是不是对称(是不是回文字符串)
- Validate Binary Search Tree--判断一个树是不是二叉查找树(重重重)
- 判断一个字符串是不是对称(是不是回文字符串)
- 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
- 判断一个字符串是不是对称的
- 判断一个数是否是回文数(两种方法1.将数字翻转看与原来是否相等2.当作字符串处理看是不是左右对称相等)
- [书摘]用C++库函数来判断一个单词是不是一个回文数
- VB中用正则表达式判断一个字符串是不是一个URL地址
- VB中用正则表达式判断一个字符串是不是一个URL地址
- 怎样知道一个数是不是2的N次方,怎样判断一个数是奇数还是偶数
- System.Odd - 判断一个整数是不是奇数
- 判断一个文件是不是excel格式的
- 判断一个数是不是4的倍数
- 如何判断一个整数是不是一个大整数的因子
- asp如何判断一个字符是不是汉字
- 判断一个数是不是2的N次方 自己写的土算法
- 判断是不是在同一个局域网
- 判断一个数是不是2的N次方,很牛的算法#define ISPOW2(x) (x) & (x-1) ? false : true
- 在VB.NET中怎么样判断一个数组是不是为空?