zoukankan      html  css  js  c++  java
  • 牛客_剑指offer题集——二叉搜索树和双向链(java实现)

    题目链接:

    https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&tqId=11179&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

    解题思路:

    我自己想出来的方法是:先用中序遍历将所有节点读到数组里,然后遍历数组形成双向链表

    网上博客用的方法:使用递归一次成型——在递归中,以根节点为单位,不断拼接前后指针,最后返回树最左边儿的节点(这种方法很巧妙,递归看起来很清爽)

    下面是源代码

    1.(用缓存实现)

    public TreeNode Convert(TreeNode pRootOfTree) {
            if(pRootOfTree==null)return null;
            ArrayList<TreeNode> res_temp = new ArrayList<>();
            inOrder(pRootOfTree,res_temp);
            TreeNode[] res = {};
            res = res_temp.toArray(res);
            for(int i = 1;i<res.length;++i){
                res[i].left = res[i-1];
                res[i-1].right = res[i];
            }
            return res[0];
        }
    
        private void inOrder(TreeNode root,ArrayList<TreeNode> res_temp){
            if(root==null) return;
    
            inOrder(root.left,res_temp);
            res_temp.add(root);
            inOrder(root.right,res_temp);
        }

    2.(使用递归)

    //递归一遍成表
        public TreeNode Convert(TreeNode pRootOfTree) {
            if(pRootOfTree==null)return null;
            if(pRootOfTree.left==null&&pRootOfTree.right==null)return pRootOfTree;
            TreeNode left = Convert(pRootOfTree.left);//返回的是树的最左边儿的节点
            TreeNode p = left;
            while (p!=null&&p.right!=null){
                p = p.right;
            }
            if(left!=null){
                p.right = pRootOfTree;
                pRootOfTree.left = p;
            }
            TreeNode right = Convert(pRootOfTree.right);
            if(right!=null){
                pRootOfTree.right = right;
                right.left = pRootOfTree;
            }
            return left!=null?left:pRootOfTree;
        }

    代码已经ac

    希望对大家有所帮助

    以上

  • 相关阅读:
    swt 更新主UI线程
    java中 快捷键输入System.out.println();
    原型设计工具
    JAVA笔记
    转:java读取配置文件的几种方法
    Server Message Block
    安全标识符
    BitLocker:如何启用网络解锁
    imageX.exe
    组策略首选项
  • 原文地址:https://www.cnblogs.com/lavender-pansy/p/12454845.html
Copyright © 2011-2022 走看看