#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)
有序数组转成平衡二叉树,平衡二叉树转成双端链表
最新推荐文章于 2021-08-12 11:03:00 发布
这篇博客介绍了如何将有序数组转换为平衡二叉搜索树(BST),以及如何将平衡BST转换为双端链表。通过递归实现,有序数组转BST采用中点作为根节点的方法,平衡树转链表则利用中序遍历。最后,博主展示了代码实现和链表打印功能。
摘要由CSDN通过智能技术生成