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);
        }
    }
  • 相关阅读:
    Python什么是二次开发的意义?python在.net项目采用
    斐波那契数
    Java 兑换ObjectC代码
    第18本:《整理的艺术》
    第16本:《视觉繁美:信息可视化方法与案例解析》
    第14本:《李鸿章传》
    第10本:《设计心理学》
    第17本:《代码的未来》
    第15本:《视不可当----信息图与可视化传播》
    第13本:《富爸爸,穷爸爸》
  • 原文地址:https://www.cnblogs.com/Adam-Ye/p/13578970.html
Copyright © 2011-2022 走看看