zoukankan      html  css  js  c++  java
  • 力扣222题(完全二叉树的节点个数)

    222.完全二叉树的节点个数

    基本思想:

    递归

    具体实现:

    普通二叉树求节点个数

    1.递归参数以及返回值

    参数:根节点

    返回值:以该节点为根节点的二叉树的节点数量

    2.递归终止条件

    遍历到空节点的话,返回0,表明节点数为0

    3.单层递归的逻辑

    先求左子树节点数量,再求右子树节点数量,最后取总再加1(当前节点)

    完全二叉树求节点个数

    两种情况:

    1.满二叉树,节点个数 = 2^树深度-1

    2.分别递归左孩子和右孩子,低轨道某一深度会有左孩子或右孩子是满二叉树,按照情况1来算

    代码:

    普通二叉树求节点个数

    class Solution {
        public int countNodes(TreeNode root) {
            if (root == null) {
                return 0;
            }
            return countNodes(root.left) + countNodes(root.right) +1;
        }
    }

    完全二叉树求节点个数

    class Solution {
        /**
         * 针对完全二叉树的解法
         *
         * 满二叉树的结点数为:2^depth - 1
         */
        public int countNodes(TreeNode root) {
            TreeNode l = root, r = root;
            int hl = 0, hr = 0;
            while (l != null){
                l = l.left;
                hl++;
            }
            while (r != null){
                r = r.right;
                hr++;
            }
            if(hl == hr){
                return (int)Math.pow(2,hl) -1;
            }
            return 1 + countNodes(root.left) + countNodes(root.right);
        }
    }
    class Solution {
        //迭代法
        public int countNodes(TreeNode root) {
            if (root == null) return 0;
            Queue<TreeNode> queue = new LinkedList<>();
            queue.offer(root);
            int result = 0;
            while (!queue.isEmpty()){
                int size = queue.size();
                while(size-- > 0){
                    TreeNode cur = queue.poll();
                    result++;
                    if (cur.left != null) queue.offer(cur.left);
                    if (cur.right != null) queue.offer(cur.right);
                }
            }
            return result;
        }
    }
  • 相关阅读:
    4.28
    12.27
    12.24
    ———————————关于一些加密博文!——————————
    博客创办目的——————欢迎相互学习
    7-14 最短工期
    指针的浅谈用于初学者
    知识点扫盲加基本板子总结
    优质文章推荐,长期更新
    杭州电子科技大学2018多校测试第一场
  • 原文地址:https://www.cnblogs.com/zhaojiayu/p/15376462.html
Copyright © 2011-2022 走看看