二叉树专题 :翻转镜像、对称、遍历、所有路径
发布日期:2021-06-20 05:37:13
浏览次数:7
分类:技术文章
本文共 3002 字,大约阅读时间需要 10 分钟。
翻转一棵二叉树。
class TreeNode { //二叉树定义 int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public TreeNode invertTree(TreeNode root) { //递归翻转二叉树 if (root==null) return null; //if (root.left==null &&root.right==null) return null; TreeNode temp=root.left; root.left=root.right; root.right=temp; invertTree(root.left); invertTree(root.right); return root; } public TreeNode invertTree2(TreeNode root) { //队列翻转二叉树 if (root==null) return null; Queuequeue=new ArrayDeque<>(); queue.add(root); while (queue.size()!=0){ TreeNode treeNode=queue.remove(); TreeNode temp=treeNode.left; treeNode.left=treeNode.right; treeNode.right=temp; if (treeNode.left!=null) queue.add(treeNode.left); if (treeNode.right!=null) queue.add(treeNode.right); } return root; }
给定一个二叉树,检查它是否是镜像对称的。
class Solution { public boolean isSymmetric(TreeNode root) { //判断二叉树是否镜像 if (root==null) return true; return compare(root.left,root.right); } private boolean compare(TreeNode left,TreeNode right){ if (left==null&&right==null) return true; //俩空 else if (left==null || right==null) return false; //一个为空 else if (right.val!=left.val) return false; //俩飞空 else return compare(left.left,right.right)&&compare(left.right,right.left); //注意比较对象为 左子树的右子树 和 右子树的左子树 }}
给定一个二叉树,返回所有从根节点到叶子节点的路径。
class Solution { Listlist= new ArrayList<>(); public List binaryTreePaths(TreeNode root) { //输出所有路径 if (root!=null) temp(root,new String()); return list; } private void temp(TreeNode root,String s){ //不能用StringBuilder这种引用类,内容会被改变 if(root.right==null &&root.left==null){ list.add(s+root.val); return ; } if (root.left!=null)temp(root.left,s+root.val+"->"); if (root.right!=null)temp(root.right,s+root.val+"->"); }}
给定一个二叉树,返回它的 前序 遍历。
class Solution { public ListpreorderTraversal(TreeNode root) { //给定一个二叉树,返回它的 前序 遍历 -- 迭代 List list= new ArrayList<>(); if (root==null) return list; Deque queue =new ArrayDeque<>(); queue.push(root); while (queue.size()>0){ // queue.size()>0 的区别 TreeNode node=queue.pop(); list.add(node.val); if (node.right!=null)queue.push(node.right); if (node.left!=null)queue.push(node.left); } return list; }}///递归//class Solution { List list1= new ArrayList<>(); public List preorderTraversal(TreeNode root) { if (root!=null) temp1(root); return list1; } private void temp1(TreeNode root){ if (root==null) return; list1.add(root.val); temp1(root.left); temp1(root.right); }}
转载地址:https://blog.csdn.net/h2453532874/article/details/88672259 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月05日 08时38分36秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
pytorch 训练数据以及测试 全部代码(1)
2019-04-26
pytorch 训练数据以及测试 全部代码(2)
2019-04-26
pytorch 训练数据以及测试 全部代码(3)
2019-04-26
Linux中ping命令
2019-04-26
numpy与Image互转以及它们的size不同,还有关于plt
2019-04-26
pycharm的安装卸载,激活与远程调试
2019-04-26
CGAN,条件GAN
2019-04-26
改进算法1
2019-04-26
用tensorflow,pytorch框架使用GPU,指定GPU问题
2019-04-26
数据处理中ToTensor紧接着Normalize
2019-04-26
WGAN
2019-04-26
调解算法参数2
2019-04-26
调节学习率的不同策略
2019-04-26
np.ascontiguousarray(array)
2019-04-26