当前位置:首页 > 编程笔记 > 正文
已解决

leetcode 每日一题复盘(10.9~10.15)

来自网友在路上 165865提问 提问时间:2023-10-09 12:57:04阅读次数: 65

最佳答案 问答题库658位专家为你答疑解惑

leetcode 101 对称二叉树 

这道题一开始想是用层序遍历,看每一层是否都对称,遇到一个问题就是空指针(子树为空)无法记录下来,同时会导致操作空指针的问题,因此需要修改入队条件,并用一个标志去表示空指针

            vector<int>numv;for(int i=0;i<size;i++){TreeNode*front=que.front();que.pop();if(front)numv.emplace_back(front->val);if(!front)numv.emplace_back(-101);if(front)que.push(front->left);if(front)que.push(front->right);}

修改后入队条件不再是看入队元素是否为空,而是看队列中的元素是否为空,这样就可以将空指针也入队同时解决操作空指针的问题,如果指针为空,那么用-101标志他(子树的值范围是-100~100)

这样修改过后运行效率还可以,但是并没有完成理解这道题

正确的解法是用类似层序遍历但不是层序遍历的思想,将左子树的左孩子和右子树的右孩子比较(外侧),将左子树的右孩子和右子树的左孩子比较(内侧),每一层(除第一层)都比较内外侧,如果不同就false,每次出队两个元素

树可以分成3种情况,都无孩子,一个孩子,和两个孩子

两个孩子则比较大小,一个孩子直接false,都无孩子即位置对称,继续下次循环

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"leetcode 每日一题复盘(10.9~10.15)":http://eshow365.cn/6-17810-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!