zoukankan      html  css  js  c++  java
  • 剑指offer第26题

    /**
     * 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
     * 要求不能创建任何新的结点,只能调整树中结点指针的指向。
     * <p>
     * 思路
     * 方式一
     * 1、先按中序遍历,把节点存入list
     * 2、再把list的节点连接成双向链表
     * <p>
     * 方式二
     * 中序遍历时直接指向
     */
    public class Solution26 {
    //    public TreeNode Convert(TreeNode pRootOfTree) {
    //        if (pRootOfTree == null) {
    //            return null;
    //        }
    //        ArrayList<TreeNode> arrayList = new ArrayList<>();
    //        ArrayList<TreeNode> list = inOrder(pRootOfTree, arrayList);
    //        return convert(list);
    //    }
    //
    //    private ArrayList<TreeNode> inOrder(TreeNode pRootOfTree, ArrayList<TreeNode> arrayList) {
    //        if (pRootOfTree.left != null){
    //            inOrder(pRootOfTree.left,arrayList);
    //        }
    //        arrayList.add(pRootOfTree);
    //        if (pRootOfTree.right != null){
    //            inOrder(pRootOfTree.right,arrayList);
    //        }
    //        return arrayList;
    //    }
    //
    //    private TreeNode convert(ArrayList<TreeNode> list) {
    //        TreeNode head = new TreeNode(0);
    //        TreeNode curr = head;
    //        for (int i = 0; i < list.size(); i++) {
    //            curr.right = list.get(i).left;
    //            list.get(i+1).left = list.get(i).right;
    //            curr = curr.right;
    //        }
    //        return head.right;
    //    }
    
        TreeNode tail;
        TreeNode head;
    
        public TreeNode Convert(TreeNode pRootOfTree) {
            if (pRootOfTree == null) {
                return pRootOfTree;
            }
            convert(pRootOfTree);
            return head;
        }
    
        public void convert(TreeNode root) {
            if (root == null) {
                return;
            }
            convert(root.left);
            if (head == null) {
                head = root;
                tail = root;
            } else {
                tail.right = root;
                root.left = tail;
                tail = root;
            }
            convert(root.right);
        }
    }
  • 相关阅读:
    使用PowerDesigner 15对现有数据库进行生成图表结构
    dynamic的使用
    js 字符串的replace() 方法和实现replaceAll() 方法
    学习新属性 requestAnimationFrame
    Mapbox 地图样式规范
    Emmet插件使用方法总结
    js循环遍历性能
    lunix部署其前端项目常见报错
    componentWillMount和componentDidMount的区别
    控制浏览器禁止缓存
  • 原文地址:https://www.cnblogs.com/Adam-Ye/p/13578970.html
Copyright © 2011-2022 走看看