ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

3.25-3.26 leetcode总结

2021-03-28 11:01:10  阅读:147  来源: 互联网

标签:right return 3.25 二叉树 3.26 null root leetcode left


2021

3

3.25

lc199 二叉树的右视图

给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

自己想法:利用二叉树的层序遍历,每次遍历一层的最后一个节点就将他加入返回的数组

    public List<Integer> rightSideView(TreeNode root) {
        //层序遍历???  lc199
        List<Integer> res = new ArrayList<>();
        if(root == null){
            return res;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while (!queue.isEmpty()){
            int size = queue.size();//层序遍历先确定每一层有多少个节点
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                if(node.left!=null){
                    queue.offer(node.left);
                }
                if(node.right!=null){
                    queue.offer(node.right);
                }
                if(i==size-1)  res.add(node.val);//这里size-1就是这一层的最后一个元素
            }
        }
        return res;
    }

lc222 完全二叉树的节点个数

给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。

首先可以利用二叉树的遍历求得所有节点时间复杂度为O(n),但是利用完全二叉树的性质可以简化。

二叉树决定了左不满则右为空,可以利用二分查找

    public int countNodes(TreeNode root) {
        if(root == null){
           return 0;
        } 
        int left = countLevel(root.left);
        int right = countLevel(root.right);
        System.out.println(left+"   "+right);
        if(left == right){
            return countNodes(root.right) + (1<<left);
        }else{
            return countNodes(root.left) + (1<<right);
        }
    }
    private int countLevel(TreeNode root){
        int level = 0;
        while(root != null){
            level++;
            root = root.left;
        }
        return level;
    }

lc17

3.26

lc257 二叉树的所有路径 递归

    public List<String> binaryTreePaths(TreeNode root) {
//    lc257二叉树的所有路径
//        if(root==null){
//            return null;
//        }
//        List<String> ans = new ArrayList<>();
//        StringBuffer sb = new StringBuffer();
//        sb = (StringBuffer)(root.val);
//        StringBuffer left =
        List<String> paths = new ArrayList<>();
        constructPaths(root,"",paths);
        return paths;

    }
    public void constructPaths(TreeNode root,String path,List<String> paths){
        if(root!=null){
            StringBuffer pathSB = new StringBuffer(path);
            pathSB.append(Integer.toString(root.val));
            if(root.left==null&&root.right==null){
                paths.add(pathSB.toString());
            }else {
                pathSB.append("->");
                						     constructPaths(root.left,pathSB.toString(),paths);
                constructPaths(root.right,pathSB.toString(),paths);
            }
        }
    }

lc113 求路径总和(到叶节点)

lc473 求根节点到叶节点数字之和

class Solution {
 int ans = 0;
    public int sumNumbers(TreeNode root) {
    //lc129
        find(root,0);
        return ans;
    }
    public void find(TreeNode root,int sum){
        if(root==null){
            return;
        }
        if(root.left==null&&root.right==null){
            sum = sum*10+ root.val;
            ans+=sum;
        }
        find(root.left,sum*10+ root.val);
        find(root.right,sum*10+ root.val);
    }

}

标签:right,return,3.25,二叉树,3.26,null,root,leetcode,left
来源: https://www.cnblogs.com/zengxy99/p/14587986.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有