zoukankan      html  css  js  c++  java
  • 求二叉树第k层的结点个数

    tag: 二叉树 - 层次遍历

     思路: 用层次遍历思路求解

     辅助: 队列

    package com.zhaochao.tree;
    
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.Queue;
    
    /**
     * Created by zhaochao on 17/1/23.
     */
    public class NodesNumberKLevel {
    
        public int getNodesNumberKLevel(TreeNode root, int k) {
    
            int count = 0;
            if(root == null || k <= 0 || k > getDepthOfTree(root)) {
                return count;
            }
            if(k == 1) {
                return 1;
            }
            Queue<TreeNode> queue = new LinkedList<TreeNode>();
            queue.add(root);
            while(!queue.isEmpty()) {
                int size = queue.size();
                if(count == k - 1) {
                    return size;
                }
                ArrayList<Integer> level = new ArrayList<Integer>();
                for(int i = 0; i < size; i++) {
                    TreeNode head = queue.poll();
                    level.add(head.val);
                    if(head.left != null) {
                        queue.offer(head.left);
                    }
                    if(head.right != null) {
                        queue.offer(head.right);
                    }
                }
                count++;
            }
            return count;
        }
    
        //递归
        public int getK(TreeNode root, int k) {
            if(root == null || k <= 0) {
                return 0;
            }
            if(k == 1) {
                return 1;
            }
            return getK(root.left, k-1) + getK(root.right, k - 1);
        }
    
        public int getDepthOfTree(TreeNode root) {
            if(root == null) {
                return 0;
            }
            int left = getDepthOfTree(root.left);
            int right = getDepthOfTree(root.right);
            return Math.max(left,right) + 1;
        }
    
        public static void main(String[] args) {
            TreeNode root = new TreeNode(0);
            TreeNode node1 = new TreeNode(1);
            TreeNode node2 = new TreeNode(2);
            TreeNode node3 = new TreeNode(3);
    
            root.left = node1;
            root.right = node2;
            node2.left = node3;
    
            NodesNumberKLevel test = new NodesNumberKLevel();
            int numbers = 0;
            numbers = test.getNodesNumberKLevel(root, 1);
            System.out.println("The numbers of nodes of level 3 is : " + numbers);
    
            System.out.println("The numbers of nodes of level 3 is : " + test.getK(root,2));
        }
    }
    

      

      

  • 相关阅读:
    一生中常用工具
    Visual Studio2005 + Visual SourceSafe 2005 实现团队开发、
    如何正确处理SQL SERVER日志文件
    Oracle SQL精妙SQL语句讲解
    Asp.Net 备份和恢复SQL SERVER 数据库
    学习中
    oracle函数[单行字符串函数]
    个人博客大收集
    UML站点
    ASP.NET(c#)常用类函数
  • 原文地址:https://www.cnblogs.com/superzhaochao/p/6346824.html
Copyright © 2011-2022 走看看