获取二叉树结点个数

[!Tip]

本节源代码见Github链接🔗


问题描述

获取二叉树结点个数


核心思路

  • 方法一:使用递归遍历二叉树,并计数
  • 方法二:使用层次遍历二叉树,并计数

实现代码

【👉🏻>>点击展开查看代码】
        
        /**  
         * 二叉树计数  
         *  
         * @className: SizeOfBinaryTree  
         * @author: Max Solider  
         * @date: 2023-06-11 16:26  
         */public class SizeOfBinaryTree {  

            /**  
             * 递归遍历计数二叉树结点数  
             *  
             * @param root 根结点  
             * @return 结点个数  
             */  
            public static int countBinaryTree(BinaryTreeNode root) {  
                if (root == null) {  
                    return 0;  
                }  
                return countBinaryTree(root.getLeft()) + 1 + countBinaryTree(root.getRight());  
            }  

            /**  
             * 层次遍历二叉树 计数  
             *  
             * @param root 根结点  
             * @return 结点个数  
             */  
            public static int countBinaryTreeWithLevelOrder(BinaryTreeNode root) {  
                if (root == null) {  
                    return 0;  
                }  
                ArrayQueue queue = new ArrayQueue(20);  
                queue.enQueue(root);  
                int count = 1;  
                while (!queue.isEmpty()) {  
                    BinaryTreeNode tmp = (BinaryTreeNode) queue.deQueue();  
                    count++;  
                    if (tmp.getLeft() != null) {  
                        queue.enQueue(tmp.getLeft());  
                    }  
                    if (tmp.getRight() != null) {  
                        queue.enQueue(tmp.getRight());  
                    }  
                }  
                return count;  
            }  

            public static void main(String[] args) {  
                BinaryTreeNode node4 = new BinaryTreeNode(4, null, null);  
                BinaryTreeNode node5 = new BinaryTreeNode(5, null, null);  
                BinaryTreeNode node6 = new BinaryTreeNode(6, null, null);  
                BinaryTreeNode node7 = new BinaryTreeNode(7, null, null);  
                BinaryTreeNode node2 = new BinaryTreeNode(2, node4, node5);  
                BinaryTreeNode node3 = new BinaryTreeNode(3, node6, node7);  
                BinaryTreeNode node1 = new BinaryTreeNode(1, node2, node3);  
                System.out.println(countBinaryTree(node1));  
                System.out.println(countBinaryTreeWithLevelOrder(node1));  
            }  
        }
        
    

时间复杂度

时间复杂度为O(n)


空间复杂度

空间复杂度为O(n)


© MaxSolider all right reserved,powered by Gitbook文件修订时间: 2023-06-11 16:34:57

results matching ""

    No results matching ""