package com.heu.wsq.leetcode.tree;
/**
* 865. 具有所有最深节点的最小子树
* @author wsq
* @date 2021/3/25
* 给定一个根为 root 的二叉树,每个节点的深度是 该节点到根的最短距离 。
* 如果一个节点在 整个树 的任意节点之间具有最大的深度,则该节点是 最深的 。
* 一个节点的 子树 是该节点加上它的所有后代的集合。
* 返回能满足 以该节点为根的子树中包含所有最深的节点 这一条件的具有最大深度的节点。
*
* 链接:https://leetcode-cn.com/problems/smallest-subtree-with-all-the-deepest-nodes
*/
public class SubtreeWithAllDeepest {
public TreeNode subtreeWithAllDeepest(TreeNode root) {
if(root == null){
return null;
}
int d = 0;
TreeNode ans = (TreeNode)dfs(root, d)[0];
return ans;
}
private Object[] dfs(TreeNode root, int d){
if(root.left == null && root.right == null){
return new Object[]{root, d};
}
Object[] left = null;
Object[] right = null;
if(root.left != null){
left = dfs(root.left, d + 1);
}
if(root.right != null){
right = dfs(root.right, d + 1);
}
if(left != null){
if(right != null){
if((Integer) left[1] == (Integer) right[1]){
return new Object[]{root, left[1]};
}else if((Integer) left[1] > (Integer) right[1]){
return left;
}else{
return right;
}
}else{
return left;
}
}else{
return right;
}
}
}
865. 具有所有最深节点的最小子树(二叉树返回数组和参数扩展)
最新推荐文章于 2025-11-30 20:35:27 发布
这篇博客讨论了一种算法问题,即在给定的二叉树中找到包含所有最深节点的最大深度子树。作者提供了一个名为`subtreeWithAllDeepest`的解决方案,通过深度优先搜索(DFS)遍历树的节点,比较左右子树的深度,以确定包含最深节点的子树。最终返回满足条件的节点。
666

被折叠的 条评论
为什么被折叠?



