牛客网-二叉搜索树转换成一个排序的双向链表
2016-10-19 18:22
288 查看
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向.
第一种方法:
第二种方法:
这种方法在原地进行操作,无需容器,通过这种方法建立的双向链表的头结点的left指针域为空,尾节点的right指针域为空,最后要调整这两个结点的指针域才能构成完全
首尾相连的双向链表!!!
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向.
第一种方法:
class Solution { public: void buildseq(TreeNode* pRootOfTree) { if (pRootOfTree != NULL){ //各元素依次入栈 buildseq(pRootOfTree->left); node.push_back(pRootOfTree); buildseq(pRootOfTree->right); } } TreeNode* Convert(TreeNode* pRootOfTree) { int i; buildseq(pRootOfTree); if (node.size() == 0)head=NULL; //修改前后邻居 else{ head = node[0]; for (i = 0; i < node.size()-1; i++){ node[i]->right = node[i + 1]; node[i + 1]->left = node[i]; } } return head; } vector<TreeNode *>node; TreeNode * head=NULL; };这种方法思想比较简单,先中序遍历二叉树,将每个结点保存在容器里,然后对容器里面的元素进行首尾相连;
第二种方法:
class Solution { public: TreeNode* Convert(TreeNode* pRootOfTree){ if (pRootOfTree == 0) return 0; //空树① TreeNode *head = 0; if (pRootOfTree->left == 0 && pRootOfTree->right == 0)return pRootOfTree; TreeNode* lhead = 0; TreeNode* rhead = 0; if (pRootOfTree->left != 0) { lhead = Convert(pRootOfTree->left); //返回左子树的头结点④ head = lhead; while (lhead->right)lhead = lhead->right; lhead->right = pRootOfTree; //左子树进行链接,直接向右搜索 pRootOfTree->left = lhead; } else head = pRootOfTree; //⑤ if (pRootOfTree->right != 0) { //能到这里说明只有根的左子树为空,则根结点肯是这这颗树的lead rhead = Convert(pRootOfTree->right); pRootOfTree->right = rhead; rhead->left = pRootOfTree; } return head; //将子树的最左结点一直返回 } //直到根结点 };
这种方法在原地进行操作,无需容器,通过这种方法建立的双向链表的头结点的left指针域为空,尾节点的right指针域为空,最后要调整这两个结点的指针域才能构成完全
首尾相连的双向链表!!!
相关文章推荐
- 将二叉搜索树转换成一个排序的双向链表
- 二叉搜索树转换成一个排序的双向链表和实现一个线程安全且高效单例类——题集(二十一)
- 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- 输入一棵二叉搜索树,现在要将该二叉搜索树转换成一个排序的双向链表。
- 二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序的双向链表
- 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- 剑指offer27---将二叉搜索树转换成一个排序的双向链表
- (Java实现)输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
- 将二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序的双向链表
- java 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- 将二叉搜索树转换成一个排序的双向链表--中序线索化的变型。
- 输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表
- 剑指offer面试题-二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序的双向链表
- 【面试题】剑指offer27--将一颗二叉搜索树转换成一个排序的双向链表
- 牛客原题 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- 题目:将二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
- 数据结构:将二叉搜索树转换成一个排序的双向链表