二叉搜索树与双向链表
2016-06-14 12:18
369 查看
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。算法设计:二叉搜索树中序遍历结果保存在队列中,再从队列中逐个修改指针。代码:#include <iostream> #include <queue> using namespace std; struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; class Solution { public: queue<TreeNode*>q; queue<TreeNode*> ConvertQueue(TreeNode* pRootOfTree) { if(pRootOfTree == NULL) return q; inorder(pRootOfTree); return q; } TreeNode* Convert(TreeNode* pRootOfTree) { if(pRootOfTree == NULL) return NULL; inorder(pRootOfTree); TreeNode *head = q.front(); TreeNode *p = head; q.pop(); TreeNode *pnext ; while(!q.empty()){ pnext = q.front(); p->right = pnext; pnext->left = p; p = pnext; q.pop(); } return head; } void inorder(TreeNode* root){ if(root->left!=NULL) inorder(root->left); q.push(root); if(root->right!=NULL) inorder(root->right); } }; int main() { TreeNode *root= new TreeNode(4); TreeNode *r1l = new TreeNode(2); TreeNode *r1r = new TreeNode(5); TreeNode *r2l = new TreeNode(1); TreeNode *r2r = new TreeNode(3); root->left = r1l; root->right = r1r; r1l->left = r2l; r1l->right = r2r; queue<TreeNode* > q; Solution s; q = s.Convert(root); while(!q.empty()){ TreeNode* x = q.front(); cout<<x->val<<' '; q.pop(); } cout<< endl; return 0; }
相关文章推荐
- 复杂链表的复制
- 平衡二叉树判断
- 二叉树的深度
- 判断一棵树是否为二叉搜索树
- nyoj 31 5个数求最值 【*min_element()与*max_element()的练习使用】
- 二叉树中和为某一值的路径
- 二叉搜索树的后序遍历序列
- 栈的压入、弹出序列
- 顺时针打印矩阵
- 重建二叉树
- Generate Parentheses
- Populating Next Right Pointers in Each Node
- 计算树中值最大路径
- Single Number II
- Best Time to Buy and Sell Stock II
- Unique Binary Search Trees
- Linked List Cycle
- python学习笔记 异步asyncio
- Integer to Roman (罗马数字转换)
- Ubuntu搭建boa服务器