二叉树-深度优先搜索-深度
Posted naonaoling
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树-深度优先搜索-深度相关的知识,希望对你有一定的参考价值。
https://leetcode-cn.com/problems/n-ary-tree-preorder-traversal/submissions/
常规解法:
递归实现,迭代实现
111. Minimum Depth of Binary Tree
class Solution {
public int minDepth(TreeNode root) {
if(root == null){
return 0;
}
// return Math.min(minDepth(root.left),minDepth(root.right))+1;
int left = minDepth(root.left);
int right = minDepth(root.right);
return (root.left!=null && root.right!=null)? 1 + Math.min(left,right): 1 + right + left;
}
}
注意:深度指的是从根节点到叶子节点最短路径上的节点个数,注释的代码没有考虑定义。
最小深度其实就是中序遍历的一种载体
104. Maximum Depth of Binary Tree
class Solution { public int maxDepth(TreeNode root) { if(root == null) return 0; return 1 + Math.max(maxDepth(root.left), maxDepth(root.right)); } }
559. Maximum Depth of N-ary Tree
class Solution { public int maxDepth(Node root) { if (root == null) { return 0; } int max = 0; for (Node node : root.children) { max = Math.max(max, maxDepth(node)); } return max + 1; } }
543. 二叉树的直径 ??
1 class Solution { 2 public int max = 0; 3 public int diameterOfBinaryTree(TreeNode root) { 4 if(root == null || (root.left==null && root.right==null)){ 5 return 0; 6 } 7 getMax(root); 8 return max; 9 10 } 11 public void getMax(TreeNode node){ 12 if(node==null){ 13 return; 14 } 15 16 int curMax = getMaxDepthOfNode(node.left)+getMaxDepthOfNode(node.right); 17 max = max > curMax ? max : curMax; 18 getMax(node.left); 19 getMax(node.right); 20 } 21 public int getMaxDepthOfNode(TreeNode node){ 22 if(node == null){ 23 return 0; 24 } 25 return 1+Math.max(getMaxDepthOfNode(node.left), getMaxDepthOfNode(node.right)); 26 } 27 }
注意:最开始理解错了,写成左子树最大深度+右子树最大深度,忽略了可能不会过root结点。
思路:求每一个node的最大深度,但是应该占内存。网传解法比我这个快,但是我感觉我的比较好理解...
98. Validate Binary Search Tree
最小深度、最大深度、全部路径、最短路径、最长路径
如何判断是在方法本身递归,还是新起一个方法?
新起的方法参数有那些
以上是关于二叉树-深度优先搜索-深度的主要内容,如果未能解决你的问题,请参考以下文章