q.pop();//访问完一个删除一个
TreeNode* rightroot = q.front();
q.pop();
if(leftroot == NULL && rightroot == NULL)//递归到根节点的时候 直接跳过 去遍历下一组数据
continue;
if(leftroot == NULL && rightroot != NULL)
return false;
if(rightroot == NULL && leftroot != NULL)
return false;
if(rightroot != NULL && leftroot != NULL && (rightroot->val != leftroot->val))
return false;
//下面的意思就是 装入队列的结点的顺序 下次遍历 做准备
q.push(leftroot->left);//装入左子树左节点
q.push(rightroot->right);//装入右子树右结点
q.push(leftroot->right);//装入左子树右节点
q.push(rightroot->left);//装入右子树左节点
}
return true;
}
};
第二种方法 栈
/**
-
Definition for a binary tree node.
-
struct TreeNode {
-
int val;
-
TreeNode *left;
-
TreeNode *right;
-
TreeNode() : val(0), left(nullptr), right(nullptr) {}
-
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
-
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
-
};
*/
class Solution {
public:
bool isSymmetric(TreeNode* root) {
/**
思路:这里我们考虑用栈,我们首次入栈的时候,我们将根节点的左右孩子节点入栈
然后我们就开始在while循环中,开始出栈比较,并且入栈的是(每个左节点的右孩子,右节点的
左孩子)(每个左节点的左孩子,右节点的有孩子)
我们通过出栈比较 如果有特殊情况 则返回fasle 否则就是true
**/
if(root == NULL) return false;
stack<TreeNode*>st;
st.push(root->left);//这里在push的时候不用考虑是否为NULL,因为我们需要比较两个节点
st.push(root->right);
while(!st.empty()) {
TreeNode* rightNode = st.top(); st.pop();
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
架构学习资料
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
[外链图片转存中…(img-0vSJrnxO-1711705587145)]
[外链图片转存中…(img-d0GKqhvF-1711705587145)]
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!