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

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

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
感谢以下文章的作者:

二叉树是面试中的常考题目。而且许多别的题是基于二叉树的,所以我们必须对二叉树
无比熟悉。
经过多日的努力,以下所有的题目主页君全部实现了一次,并且加上自己的理解,所有
的算法都基本最优化过,并且递归非递归都实现了一次。敬请大家指正:

以下是目录,以及主页君的代码

http://weibo.com/3948019741/Bq8XobZFD

1. 求二叉树中的节点个数:
        getNodeNumRec(递归),getNodeNum(迭代)
2. 求二叉树的深度:
        getDepthRec(递归),getDepth
3. 前序遍历,中序遍历,后序遍历:
        preorderTraversalRec, preorderTraversal, inorderTraversalRec,
postorderTraversalRec
4. 分层遍历二叉树(按层次从上往下,从左往右):
        levelTraversal, levelTraversalRec(递归解法)
5. 将二叉查找树变为有序的双向链表:
        convertBST2DLLRec, convertBST2DLL
6. 求二叉树第K层的节点个数:
        getNodeNumKthLevelRec, getNodeNumKthLevel
7. 求二叉树中叶子节点的个数:
        getNodeNumLeafRec, getNodeNumLeaf
8. 判断两棵二叉树是否相同的树:
        isSameRec, isSame
9. 判断二叉树是不是平衡二叉树:isAVLRec
10. 求二叉树的镜像(破坏和不破坏原来的树两种情况):
     mirrorRec, mirrorCopyRec
     mirror, mirrorCopy
10.1 判断两个树是否互相镜像:isMirrorRec isMirror
11. 求二叉树中两个节点的最低公共祖先节点:
         LAC        求解最小公共祖先, 使用list来存储path.
         LCABstRec  递归求解BST树.
         LCARec     递归算法 .
12. 求二叉树中节点的最大距离:
         getMaxDistanceRec
13. 由前序遍历序列和中序遍历序列重建二叉树:
         rebuildBinaryTreeRec
14. 判断二叉树是不是完全二叉树:
         isCompleteBinaryTree, isCompleteBinaryTreeRec
15. 找出二叉树中最长连续子串(即全部往左的连续节点,或是全部往右的连续节点)
         findLongest

点评

https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/tree/TreeDemo.java  发表于 2014-10-24 16:03
http://blog.csdn.net/fightforyourdream/article/details/16843303 直接戳以上地址  发表于 2014-10-21 14:21

评分

参与人数 1大米 +3 收起 理由
hellosniper + 3 非常感谢

查看全部评分


上一篇:问一下cc150 4.9的复杂度
下一篇:leetcode又出新题了

本帖被以下淘专辑推荐:

推荐
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 的结构呢
回复

使用道具 举报

推荐
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才对吧
回复

使用道具 举报

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

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

使用道具 举报

🔗
 楼主| imabluefish 2014-10-21 16:21:06 | 只看该作者
全局:
虽然是参考的 但是也是有优化过,比原文章其实更优化
回复

使用道具 举报

🔗
 楼主| imabluefish 2014-10-22 11:59:28 | 只看该作者
全局:
希望大家一起来讨论
回复

使用道具 举报

🔗
marine 2014-10-23 06:42:18 | 只看该作者
全局:
imabluefish 发表于 2014-10-22 11:59
希望大家一起来讨论

lz是今年入学的ini学生吗?
回复

使用道具 举报

🔗
 楼主| imabluefish 2014-10-23 08:51:27 | 只看该作者
全局:
marine 发表于 2014-10-23 06:42
lz是今年入学的ini学生吗?

您是? 加我的qq 私聊吧  我是215573479 我已经2年级了。
回复

使用道具 举报

🔗
 楼主| imabluefish 2014-10-24 15:46:09 | 只看该作者
本楼:
全局:
顶一顶。
回复

使用道具 举报

🔗
 楼主| imabluefish 2014-10-28 14:45:43 | 只看该作者
全局:
顶一下自己。 谢谢支持
回复

使用道具 举报

🔗
 楼主| imabluefish 2014-10-29 00:09:00 | 只看该作者
本楼:
全局:
顶一顶。
回复

使用道具 举报

🔗
 楼主| imabluefish 2014-11-11 08:09:47 | 只看该作者
全局:
希望有更多的人看到本帖子。
回复

使用道具 举报

🔗
 楼主| imabluefish 2014-12-3 17:29:13 | 只看该作者
全局:
顶一下帖子。
回复

使用道具 举报

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

本版积分规则

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