讲二次搜索树转化为排序的双向链表

package com.gylhaut.bean;

public class TreeNode<T> {
    public T data;
    public TreeNode left;
    public TreeNode right;

    public TreeNode(T data) {
        this.left = null;
        this.right = null;
        this.data = data;
    }
}

 算法实现:

package com.gylhaut.util;

import com.gylhaut.bean.TreeNode;

public class BinaryTreeHelper {

    /**
     * 指向头节点
     * @param root
     * @return
     */
    public static TreeNode convert(TreeNode root){
        root=convert2Link(root);
        while (root.left != null){
            root = root.left;
        }
        return root;
    }

    /**
     * 搜索二叉树转成双向链表
     * @param root
     * @return
     */
    public static TreeNode convert2Link(TreeNode root){
        if(root == null|| (root.left == null && root.right == null)){
            return root;
        }
        TreeNode tmp = null;
        if(root.left != null){
           tmp= convert2Link(root.left);
           while (tmp.right != null){
               tmp = tmp.right;
           }
           tmp.right = root;
           root.left = tmp;
        }
        if (root.right !=null){
            tmp = convert2Link(root.right);
            while (tmp.left != null){
                tmp = tmp.left;
            }
            tmp.left = root;
            root.right = tmp;
        }

        return root;
    }

}

  

posted @ 2019-01-15 11:17  流星小子  阅读(135)  评论(0编辑  收藏  举报