Convert Sorted List to Binary Search Tree [leetcode] O(n)的算法

本文介绍如何将有序链表转换为平衡二叉搜索树,通过递归中序遍历的方法实现。同时探讨了如何将二叉搜索树转换为双向链表的问题。

主要的思想类似中序遍历,先构建左子树,再构建当前节点,并构建右子树

TreeNode *sortedListToBST(ListNode *head) {
        int count = 0;
        ListNode * cur = head;
        while (cur)
        {
            count++;
            cur = cur->next;
        }
        return sortedListToBST(head, count);
    }
    
    TreeNode *sortedListToBST(ListNode * (&head), int count) {
        if (count <= 0) return NULL;
        TreeNode* left = sortedListToBST(head, count / 2 );
        TreeNode * root = new TreeNode(head->val);
        head = head->next;
        root->left = left;
        root->right = sortedListToBST(head, count - (count / 2) - 1);
        return root;
    }

还有一个类似的题目:将二叉搜索树转换成双向链表

同样是类似中序遍历,先将左子树变成双向链表,再处理右子树

代码如下:

void BSTToList(TreeNode * t, ListNode * &l)
{
	if (t->left) BSTToList(t->left, l);
	ListNode * cur = new ListNode(t->val);
	cur->left = l;
	if (!l) l->right = cur;
	l = cur;
	if (t->right) BSTToList(t->right, l);
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值