LeetCode101(dfs/bfs)
发布日期:2021-06-29 21:37:08
浏览次数:2
分类:技术文章
本文共 1848 字,大约阅读时间需要 6 分钟。
**dfs思路:**根据题目的描述,镜像对称,就是左右两边相等,也就是左子树和右子树是相等的。因此采用两个指针p,q分别指向左右两颗子树,在每次递归时候就判断一下当前节点是否相等,不相等则直接返回false,相等则继续递归下去,注意递归子树时候p,q指针同步指向问题,也就是说: p的左孩子要和q的右孩子比较,p的右孩子要和q的左孩子进行比较。 最后递归的判断两颗子树即可。 下面引用一张图形象描述递归比较过程。中间递归返回的未显示出 bfs思路:类似层次遍历,只是我们需要注意入队的顺序。都到了叶子节点还需要将null入队。(当然也可以不入队直接判断左右孩子节点null情况) 代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public boolean isSymmetric(TreeNode root) { if(root==null) return true; //return dfs(root.left,root.right); return bfs(root); } public boolean dfs(TreeNode p,TreeNode q){ if(p==null&&q==null) return true; if(p==null||q==null||p.val!=q.val) return false; return dfs(p.left,q.right)&&dfs(p.right,q.left); } public boolean bfs(TreeNode root){ if(root.right==null&&root.left==null) return true; Queuequeue = new LinkedList (); queue.add(root.left); queue.add(root.right); while(queue.size()>0){ TreeNode p=queue.poll(); TreeNode q=queue.poll(); if(p==null&&q==null) continue; if(p==null||q==null||p.val!=q.val) return false;//注意先比较null再判断值,否则可能会空指针 queue.add(p.left); queue.add(q.right); queue.add(p.right); queue.add(q.left); } return true; }}
下表显示了jdk1.5中的阻塞队列的操作:
方法 | 作用 | 队满/空处理 |
---|---|---|
add | 增加一个元素 | 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 |
remove | 移除并返回队列头部的元素 | 如果队列为空,则抛出一个NoSuchElementException异常 |
element | 返回队列头部的元素 | 如果队列为空,则抛出一个NoSuchElementException异常 |
offer | 添加一个元素并返回true | 如果队列已满,则返回false |
poll | 移除并返问队列头部的元素 | 如果队列为空,则返回null |
peek | 返回队列头部的元素 | 如果队列为空,则返回null |
put | 添加一个元素 | 如果队列满,则阻塞 |
take | 移除并返回队列头部的元素 | 如果队列为空,则阻塞 |
remove、element、offer 、poll、peek 其实是属于Queue接口。
转载地址:https://dh-butterfly.blog.csdn.net/article/details/108362186 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月25日 07时22分22秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Git学习(二):git-rev-parse命令初识
2019-04-30
vim字符串替换
2019-04-30
C语言:堆和栈的区别是什么?
2019-04-30
C语言:二级指针(指向指针的指针)详解
2019-04-30
C语言:断言assert函数完全攻略
2019-04-30
C语言:命令行选项解析函数---getopt()和getopt_long()
2019-04-30
C语言:inline,static inline
2019-04-30
Git学习(三):Git 撤销commit文件 和 回退push的文件
2019-04-30
WAV系列之一:G711编解码原理及代码实现
2019-04-30
WAV系列之二:ADPCM编解码原理及代码实现
2019-04-30
详解shell中source、sh、bash、./执行脚本的区别
2019-04-30
Git学习(四):git clean的用法
2019-04-30
Linux命令(一): ln - 创建和删除软、硬链接
2019-04-30
C语言:static关键字的作用
2019-04-30
C语言:volatile关键字的作用
2019-04-30
/usr/bin/ld: skipping incompatible解决方案
2019-04-30
Gstreamer学习笔记(8):Gobject类对象
2019-04-30