标签:list pre 层序遍历 remove getwidth 宽度 二叉树的深度 nod 使用
递归版本
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; }
标签:list pre 层序遍历 remove getwidth 宽度 二叉树的深度 nod 使用
原文地址:https://www.cnblogs.com/neuzk/p/9486095.html