牛客网剑指offer=>分治

JZ26 二叉搜索树与双向链表

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


import java.util.ArrayList;
import java.util.List;
public class Solution {
    List<Integer> list = new ArrayList<>();
    
    TreeNode head = null;
    TreeNode pre = null;
    public TreeNode Convert(TreeNode pRootOfTree) {
        //方法一:
//        if (pRootOfTree==null)
//            return null;
//        //先中序遍历
//        midTree(pRootOfTree);
//        //再构建双向链表
//        return convert(list);
        //方法二:线索化二叉树的构建
//         if(pRootOfTree==null){
//             return null;
//         }
//         Convert(pRootOfTree.left);

//         if(head==null){
//             head = pRootOfTree;
//         }
//         if(pre!=null){
//             pRootOfTree.left = pre;
//             pre.right = pRootOfTree;
//         }
//         pre = pRootOfTree;
//         Convert(pRootOfTree.right);
        
//         return head;
        
        //方法三:线索化二叉树不再用一个变量(上面用的head)保存头指针的话是降序,所以我们可以从右子树开始遍历。减少变量的使用
        if(pRootOfTree==null){
            return null;
        }
        Convert(pRootOfTree.right);
        if(pre!=null){
            pRootOfTree.right=pre;
            pre.left = pRootOfTree;
        }
        pre = pRootOfTree;
        Convert(pRootOfTree.left);
        return pre;
    }
    
    public void midTree(TreeNode pRootOfTree){
        if(pRootOfTree==null){
            return;
        }
        midTree(pRootOfTree.left);
        list.add(pRootOfTree.val);
        midTree(pRootOfTree.right);
    }

    public TreeNode convert(List<Integer> list){
        TreeNode head = new TreeNode(list.get(0));
        TreeNode cur = head;
        for(int i=1;i<list.size();i++){
            TreeNode node = new TreeNode(list.get(i));
            node.left = cur;
            cur.right = node;
            cur = node;
        }
        return head;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值