📣 VIP通行证夏日特惠 限时立减$68
楼主: imabluefish
跳转到指定楼层
上一主题 下一主题
收起左侧

算法超级大总结-- 面试中二叉树中常常考的题目欢迎讨论

🔗
 楼主| imabluefish 2015-1-6 17:11:46 | 只看该作者
全局:
顶一下 希望更多的人可以看到。
回复

使用道具 举报

🔗
Sinbo_Chan 2015-1-8 12:02:14 | 只看该作者
全局:
public static int getDepthRec(TreeNode root) {
        if (root == null) {
            return -1;
        }
        
        return Math.max(getDepthRec(root.left), getDepthRec(root.right)) + 1;
    }
若为null应该返回0才对吧
回复

使用道具 举报

🔗
 楼主| imabluefish 2015-1-8 18:58:14 | 只看该作者
全局:
Sinbo_Chan 发表于 2015-1-8 12:02
public static int getDepthRec(TreeNode root) {
        if (root == null) {
            return -1;
...

标准定义是-1. 这个定义你到时与面官确认吧。
回复

使用道具 举报

🔗
 楼主| imabluefish 2015-1-8 18:58:39 | 只看该作者
全局:
Sinbo_Chan 发表于 2015-1-8 12:02
public static int getDepthRec(TreeNode root) {
        if (root == null) {
            return -1;
...

在树的深度定义中,只有一个节点,定义depth为0.
回复

使用道具 举报

🔗
Sinbo_Chan 2015-1-8 22:40:04 | 只看该作者
全局:
imabluefish 发表于 2015-1-8 18:58
在树的深度定义中,只有一个节点,定义depth为0.

递归到了base case后停下,若最后一步返回一个-1,会比真实深度少1. 欢迎指教
回复

使用道具 举报

🔗
 楼主| imabluefish 2015-1-9 11:27:07 | 只看该作者
全局:
Sinbo_Chan 发表于 2015-1-8 22:40
递归到了base case后停下,若最后一步返回一个-1,会比真实深度少1. 欢迎指教

null的真实深度就是-1.这是树的定义。你可以查一下算法书。 depth的定义是:从根到最远的叶子节点的边的长度。 如果只有一个root,长为0,如果是null,长为-1
回复

使用道具 举报

🔗
Sinbo_Chan 2015-1-10 06:46:14 | 只看该作者
全局:
imabluefish 发表于 2015-1-9 11:27
null的真实深度就是-1.这是树的定义。你可以查一下算法书。 depth的定义是:从根到最远的叶子节点的边的 ...

谢谢楼主,我发现国内的二叉树和国外的教材定义不同,root的depth的确是0. 国内的是1. 而且我发现我把depth和height也搞混了。非常感谢!
回复

使用道具 举报

🔗
Sinbo_Chan 2015-1-10 06:46:23 | 只看该作者
全局:
imabluefish 发表于 2015-1-9 11:27
null的真实深度就是-1.这是树的定义。你可以查一下算法书。 depth的定义是:从根到最远的叶子节点的边的 ...

谢谢楼主,我发现国内的二叉树和国外的教材定义不同,root的depth的确是0. 国内的是1. 而且我发现我把depth和height也搞混了。非常感谢!
回复

使用道具 举报

🔗
Sinbo_Chan 2015-1-10 12:37:23 | 只看该作者
全局:
public static int getMaxDistanceRec(TreeNode root) {
        return getMaxDistanceRecHelp(root).maxDistance;
    }
   
    public static Result getMaxDistanceRecHelp(TreeNode root) {
        Result ret = new Result(-1, -1);
        
        if (root == null) {
            return ret;
        }
        
        Result left = getMaxDistanceRecHelp(root.left);
        Result right = getMaxDistanceRecHelp(root.right);
        
        // 深度应加1, the depth from the subtree to the root.
        ret.depth = Math.max(left.depth, right.depth) + 1;
        
        // 左子树,右子树与根的距离都要加1,所以通过根节点的路径为两边深度+2
        int crossLen = left.depth + right.depth + 2;
        
        // 求出cross根的路径,及左右子树的独立路径,这三者路径的最大值。
        ret.maxDistance = Math.max(left.maxDistance, right.maxDistance);
        ret.maxDistance = Math.max(ret.maxDistance, crossLen);
        
        return ret;
    }
我想再问问 maxdistance 是 左右子树的max depth 和 crossLen 进行比较的最大值吗?若如此,为什么需要这个result 的结构呢
回复

使用道具 举报

🔗
 楼主| imabluefish 2015-1-11 00:50:35 | 只看该作者
全局:
Sinbo_Chan 发表于 2015-1-10 06:46
谢谢楼主,我发现国内的二叉树和国外的教材定义不同,root的depth的确是0. 国内的是1. 而且我发现我把dep ...

国内写错了吧!!! 国内经常搞这些事 自己都没弄懂还乱教学生。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表