有序数组转成平衡二叉树,平衡二叉树转成双端链表

这篇博客介绍了如何将有序数组转换为平衡二叉搜索树(BST),以及如何将平衡BST转换为双端链表。通过递归实现,有序数组转BST采用中点作为根节点的方法,平衡树转链表则利用中序遍历。最后,博主展示了代码实现和链表打印功能。
摘要由CSDN通过智能技术生成
#include <vector>
#include <iostream>
using namespace std;


//二叉树的树结构
struct TreeNode{
	int val;
	TreeNode* left;
	TreeNode* right;
	TreeNode(char t) :val(t), left(0), right(0){};
};

//有序数组转成平衡二叉树
//也是一个递归的过程,每次都把数组分为两个部分,
//作为左子树和右子树。

TreeNode* sortedArray2BST(vector<int>& nums) {
	return BST(nums, 0, nums.size() - 1);
}

TreeNode* BST(vector<int>& nums, int s, int t){
	if (s > t)  return 0;
	int mid = (s + t) / 2;
	TreeNode* p = new TreeNode(nums[mid]);
	p->left = BST(nums, s, mid - 1);
	p->right = BST(nums, mid + 1, t);
	return p;
}

//平衡二叉树转成双端链表
//递归实现平衡二叉树转成双端链表
//其实就是一个中序遍历,前中后,输出节点换成建立指针的过程
//一个传递引用的哨兵节点指针,或者全局变量也可以。
//这里我新建了一个node,方便递归。
TreeNode* Tree2List(TreeNode* root){
	TreeNode temp(0);
	TreeNode* p = &temp;
	TreeList(root, p);
	temp.right->left = 0;
	return temp.right;
}

void TreeList(TreeNode* root, TreeNode* &p){
	if (root)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值