二叉树专题 :翻转镜像、对称、遍历、所有路径
发布日期: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;        Queue
queue=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 {    List
list= 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 List
preorderTraversal(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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:leetcode -java 56. 合并区间
下一篇:java内存泄漏

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月05日 08时38分36秒