普通二叉树转换成搜索二叉树

struct ListNode
{
    int data;
    ListNode *lchild,*rchild;
};

void CreateBSTree(ListNode *B2_root,ListNode *BSTree_root)
{
     if(BSTree_root==NULL)
     {
         BSTree_root = (ListNode*)malloc(sizeof(ListNode));
         BSTree_root->lchild=BSTree_root->rchild=NULL;
         BSTree_root->data=B2_root->data;
         return ;
     }
     if(B2_root->data<BSTree_root->data) CreateBSTree(B2_root,BSTree_root->lchild);
     if(B2_root->data>BSTree_root->data) CreateBSTree(B2_root,BSTree_root->rchild);
}

void PreOrder(ListNode *B2_root,ListNode *BSTree_root)
{
     if(B2_root==NULL) return ;//根节点就为空
     CreateBSTree(B2_root,BSTree_root);
     if(B2_root->lchild!=NULL) PreOrder(B2_root->lchild,BSTree_root);
     if(B2_root->rchild!=NULL) PreOrder(B2_root->rchild,BSTree_root);
}

ListNode* CreateBSTree(ListNode* B2_root)
{
    ListNode* BSTree_root=NULL;
    PreOrder(B2_root,BSTree_root);
    return BSTree_root;
}

  

时间: 2024-08-08 09:37:15

普通二叉树转换成搜索二叉树的相关文章

栈和队列----将搜索二叉树转换成双向链表

将搜索二叉树转换成双向链表 对于BST 来说,有本身的值域,有指向左孩子和右孩子的两个指针:对于双向链表来说,有本身的值域,有指向上一个节点和下一个节点的指针.将这个BST转换成双向链表,对于每一个节点来说,原来的right指针等价于转换后的next指针,原来的left指针等价于转换后的left指针,最后返回双向链表的头节点. [解析] 用队列等容器收集二叉树 中序遍历的结果的方法.其时间复杂度是O(N),空间复杂度是O(N). 1. 生成一个队列,记为queue,按照二叉树的中序遍历的顺序,将

二叉树转换成森林&amp;森林变成二叉树

一,树转换成二叉树 1,将所有兄弟结点连起来; 2,保留第一个兄弟结点与父节点的连接,断开其他兄弟结点与父节点的连接,然后以根节点为轴按照顺时针方向旋转45度 二,二叉树转换成森林 方法: 1,将每棵树转换为二叉树 2,将1中得到的二叉树的根节点看作是兄弟连接起来. 三,森林转换二叉树 右结点全部断开拿到根节点上去

二叉树转换成森林&amp;amp;森林变成二叉树

一,树转换成二叉树 1,将全部兄弟结点连起来; 2,保留第一个兄弟结点与父节点的连接,断开其它兄弟结点与父节点的连接,然后以根节点为轴依照顺时针方向旋转45度 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU2h1aVRpYW5OYWlMdW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 二,二叉树转换成森林 方法: 1,将每棵树转换为二叉

左神算法书籍《程序员代码面试指南》——2_12将搜索二叉树转换成双向链表

对二叉树的节点来说,有本身的值域,有指向左孩子和右孩子的两个指针:对双向链表的节点来说,有本身的值域,有指向上一个节点和下一个节点的指针.在结构上,两种结构有相似性,现在有一棵搜索二叉树,请将其转换为一个有序的双向链表. 1 #include <iostream> 2 #include <queue> 3 using namespace std; 4 struct treeNode 5 { 6 int v; 7 treeNode *l, *r; 8 treeNode(int a =

二叉树转换成双向链表

*.hl_mark_KMSmartTagPinkImg{background-color:#ffaaff;}*.hl_mark_KMSmartTagBlueImg{background-color:#99ccff;}*.hl_mark_KMSmartTagYellowImg{background-color:#ffff66;}*.hl_mark_KMSmartTagOrangeImg{background-color:#ffad5b;}*.hl_mark_KMSmartTagGreenImg{b

Cracking-- 17.13 将二叉树转换成双向链表

在书的105页 使用中根遍历的思想 left 之后 为 root 之后 为 right 则对左子树来说 left->right = root; root->left = left; 对右子树来说 root->right = right-> -> -> left; left->left 为根的根   的根 而right->left 则为直接的根 #include <iostream> #include <vector> using na

将二叉树转换成双向链表

思路:采用中序遍历的方法,visit函数需要完成的功能为: 1.当前节点的左子节点指向上一次访问的节点: 2.将上一次访问节点的右子节点指向当前节点: 3.最后更新上一次访问节点为当前节点. 在第二步时需要判断上一次访问节点是不是为NULL,如果是,则第二步改为链表的头结点指向当前节点. 程序如下: struct BSTnode { int data; BSTnode * left; BSTnode * right; }*pList,*pHead; void visit(BSTnode * pC

数据结构--‘搜索二叉树’

'二叉树'是数据结构中比较重要的一部分,这里主要讨论一下'搜索二叉树',针对'搜索二叉树的插入.删除和查找节点进行分情况讨论,希望能够帮助读者更加的理解搜索二叉树的原理. ◆搜索二叉树的性质: 1.每个节点都有一个一个作为搜索依据的关键码,所有节点的关键码都不相同. 2.左子树所有的关键码(key)都小于根节点的关键码(key). 3.右子树所有的关键码(key)都大于根节点的关键码(key). 4.左.右子树都是二叉搜索树. 实现'搜索二叉树'的节点结构可以实现为K形式,和K.V形式,若实现K

新手学习算法----二叉树(将一个二叉查找树按照中序遍历转换成双向链表)

题目:将一个二叉查找树按照中序遍历转换成双向链表. 给定一个二叉查找树: 4 / 2 5 / 1 3 返回 1<->2<->3<->4<->5. 思路:如果对于当前节点,把右子树转换成双向链表,然后把左子树转换成双向链表,转换的时候我们都标记了链表的头节点和尾节点,那么只需要将当前节点和左子树的尾部相连,和右子树的头部相连即可. Java代码:这个是借鉴九章里面的解题法.但是对于左右子树转换成二叉树也不是很理解,还待需要继续分析. /** * Definit