<LeetCode OJ> 100. Same Tree
100. Same Tree
Submissions: 236623 Difficulty: Easy
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.
1,朴素的递归思想:
1)。函数返回值怎样构成原问题的解
明白函数意义,
推断以节点p和q为根的二叉树是否一样,获取当前以p和q为根的子树的真假情况
bool isSameTree(TreeNode* p, TreeNode* q){
函数体.....
}
解的构成,
每个节点的左子树和右子树同一时候一样才干组合成原问题的解。原问题接收来自全部子问题的解。仅仅要有一个假就可以全部为假(与运算)
2)。递归的截止条件
截止条件就是能够得出结论的条件。
假设p和q两个节点是叶子,即都为NULL,能够觉得是一样的。return true
假设存在一个为叶子而还有一个不是叶子,显然当前两个子树已经不同,return false
假设都不是叶子,但节点的值不相等,最显然的不一样。return false
3)总是反复的递归过程
当2)中全部的条件都“躲过了”,即q和p的两个节点是同样的值。那就继续推断他们的左子树和右子树是否一样。
即,isSameTree(p->left,q->left)和isSameTree(p->right,q->right)
4)控制反复的逻辑
显然仅仅有两个子树都同样时,才干获取终于结果,否则即为假。
例如以下所看到的
return (isSameTree(p->left,q->left))&&(isSameTree(p->right,q->right));
/**
* 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) {
if(p==NULL&&q==NULL)
return true;
else if(p==NULL&&q!=NULL)
return false;
else if(p!=NULL&&q==NULL)
return false;
else if(p!=NULL&&q!=NULL && p->val!=q->val)
return false;
else
return (isSameTree(p->left,q->left))&&(isSameTree(p->right,q->right));
}
};
2,广度优先迭代遍历:
/**
* 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) {
if(q==NULL && p ==NULL)
return true;
if(q == NULL && p!=NULL || q != NULL && p==NULL)
return false;
//广度优先遍历两个子树是否一样
queue<TreeNode*> que1,que2;
TreeNode* curNode1=p;
TreeNode* curNode2=q;
que1.push(curNode1);
que2.push(curNode2);
while (!que1.empty()&&!que2.empty())
{
curNode1=que1.front();//出队首元素
que1.pop();//删除队首元素
curNode2=que2.front();//出队首元素
que2.pop();//删除队首元
if(!(curNode1->val==curNode2->val))
return false;
if(curNode1->left!=NULL && curNode2->left!=NULL)
{
que1.push(curNode1->left);
que2.push(curNode2->left);
} if(curNode1->right!=NULL && curNode2->right!=NULL)
{
que1.push(curNode1->right);
que2.push(curNode2->right);
}
if(curNode1->left == NULL && curNode2->left!=NULL || curNode1->left != NULL && curNode2->left==NULL)
return false; if(curNode1->right == NULL && curNode2->right!=NULL || curNode1->right != NULL && curNode2->right==NULL)
return false;
}
return true;
}
};
3,前序式深度优先搜索来做:
/**
* 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) {
if(q==NULL && p ==NULL)
return true;
if(q == NULL && p!=NULL || q != NULL && p==NULL)
return false;
//前序式深度优先遍历两个子树是否一样
stack<TreeNode*> stk1,stk2;
TreeNode* curNode1=p;
TreeNode* curNode2=q;
stk1.push(curNode1);
stk2.push(curNode2);
while (!stk1.empty()&&!stk2.empty())
{
curNode1=stk1.top();//出队首元素
stk1.pop();//删除队首元素
curNode2=stk2.top();//出队首元素
stk2.pop();//删除队首元
if(!(curNode1->val==curNode2->val))
return false;
if(curNode1->left!=NULL && curNode2->left!=NULL)
{
stk1.push(curNode1->left);
stk2.push(curNode2->left);
} if(curNode1->right!=NULL && curNode2->right!=NULL)
{
stk1.push(curNode1->right);
stk2.push(curNode2->right);
}
if(curNode1->left == NULL && curNode2->left!=NULL || curNode1->left != NULL && curNode2->left==NULL)
return false; if(curNode1->right == NULL && curNode2->right!=NULL || curNode1->right != NULL && curNode2->right==NULL)
return false;
}
return true;
}
};
注:本博文为EbowTang原创,兴许可能继续更新本文。假设转载,请务必复制本条信息!
原文地址:http://blog.csdn.net/ebowtang/article/details/50507131
原作者博客:http://blog.csdn.net/ebowtang
本博客LeetCode题解索引:http://blog.csdn.net/ebowtang/article/details/50668895
<LeetCode OJ> 100. Same Tree的更多相关文章
- LeetCode OJ 100. Same Tree
Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...
- Leetcode 笔记 100 - Same Tree
题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...
- 【LEETCODE OJ】Binary Tree Postorder Traversal
Problem Link: http://oj.leetcode.com/problems/binary-tree-postorder-traversal/ The post-order-traver ...
- 【LeetCode OJ】Same Tree
Problem Link: https://oj.leetcode.com/problems/same-tree/ The following recursive version is accepte ...
- 【LeetCode OJ】Symmetric Tree
Problem Link: https://oj.leetcode.com/problems/symmetric-tree/ To solve the problem, we can traverse ...
- 【LeetCode OJ】Binary Tree Level Order Traversal
Problem Link: https://oj.leetcode.com/problems/binary-tree-level-order-traversal/ Traverse the tree ...
- 【LeetCode OJ】Binary Tree Zigzag Level Order Traversal
Problem Link: https://oj.leetcode.com/problems/binary-tree-zigzag-level-order-traversal/ Just BFS fr ...
- 【LeetCode OJ】Binary Tree Level Order Traversal II
Problem Link: https://oj.leetcode.com/problems/binary-tree-level-order-traversal-ii/ Use BFS from th ...
- 【LeetCode OJ】Binary Tree Maximum Path Sum
Problem Link: http://oj.leetcode.com/problems/binary-tree-maximum-path-sum/ For any path P in a bina ...
- 【LEETCODE OJ】Binary Tree Preorder Traversal
Problem Link: http://oj.leetcode.com/problems/binary-tree-preorder-traversal/ Even iterative solutio ...
随机推荐
- 关于H5优化的一些问题
required修改默认提示 : <form action="abc.php"> <input type="text" required o ...
- Tomcat安全设置与优化详解(非原创)
一.Tomcat简介二.Tomcat安全设置三.Tomcat优化四.参考文章 一.Tomcat简介 Tomcat 是 Apache软件基金会下的一个免费.开源的WEB应用服务器,它可以运行在 Li ...
- 23. Merge k Sorted Lists[H]合并k个排序链表
题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...
- The name ‘InitialzeComponent’ does not exist in the current context
在Visual Studio中创建Windows Store项目,在MainPage.xaml.cs中出现错误: The name 'InitialzeComponent' does not exis ...
- JavaScript 字符串匹配 | JS 的正则用法 | 从后边匹配
// 字符串匹配命令是 match,不是 replace var text = "http://123.com/456.html" ; window.alert(text.matc ...
- 软件神器系列——photozoom图片像无损清晰放大软件砸金蛋活动开始啦!
不管是刚进入社会的小白,还是混迹多年的油条,是不是发现了最近的工作越来越难做了? 推广文章.产品手册.营销方案.培训计划.工作报告乃至于PPT,都不是以前用文字数据可以交工的了,现在都讲究“图文并茂” ...
- 第一个TensorFlow程序
第一个TensorFlow程序 TensorFlow的运行方式分为如下4步: (1)加载数据及定义超参数 (2)构建网络 (3)训练模型 (4)评估模型和进行预测 import tensorflow ...
- 常用CSS代码片段常见css bug
1.禁止文字被选中 .unselectable { -moz-user-select: -moz-none; -khtml-user-select: none; -webkit-user-select ...
- FastFDS常用命令
1.启停fastdfs相关服务 #start fastdfs 启动服务 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart /usr/loca ...
- javaee 文件的读取
package Shurushucu; import java.io.FileNotFoundException; import java.io.FileOutputStream; import ja ...