二叉树的宽度和深度
Posted neuzk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的宽度和深度相关的知识,希望对你有一定的参考价值。
一、深度
递归版本
public static int getDeep(TreeNode root){ if(root == null) return 0; int left = getDeep(root.left); int right = getDeep(root.right); return 1 + Math.max(left, right); }
非递归版本
思想:二叉树的深度就是指二叉树有几层,那么我们可以使用层序遍历来实现。
public static int getDeep(TreeNode root) { if (root == null) return 0; LinkedList<TreeNode> list = new LinkedList<>(); list.addLast(root); int count = 1; //每层的结点数 int num = 1; //一共多少层 while (!list.isEmpty()) { int size = 0; //临时保存下一层节点的个数 for (int i = 0; i < count; i++) { TreeNode node = list.removeFirst(); if (node.left != null) { list.addLast(node.left); size++; } if (node.right != null) { list.addLast(node.right); size++; } } count = size; if(size != 0)num++; } return num; }
二、宽度
思想:二叉树的宽度就是最宽的那一层的节点数,所以还是需要层序遍历的思想,先计算每层的结点数,然后找出最大的。
public static int getWidth(TreeNode root) { if (root == null) return 0; int width = 1; //宽度 int num = 1; //每层的结点数 LinkedList<TreeNode> list = new LinkedList<>(); list.add(root); while (!list.isEmpty()) { int size = 0; //临时保存下一层的结点数 for (int i = 0; i < num; i++) { TreeNode node = list.removeFirst(); if (node.left != null) { list.addLast(node.left); size++; } if (node.right != null) { list.addLast(node.right); size++; } } num = size; if(width < num) width = num; } return width; }
以上是关于二叉树的宽度和深度的主要内容,如果未能解决你的问题,请参考以下文章