微软面试100之1 把二元查找树转变成排序的双向链表(树)
2013-09-02 14:08
411 查看
1.把二元查找树转变成排序的双向链表(树)
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ /
6 14
/ / / /
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
首先我们定义的二元查找树 节点的数据结构如下:
struct BSTreeNode
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
};
#include <iostream>
#include <stdio.h>
using namespace std;
struct BSTreeNode {
int value;
BSTreeNode* left;
BSTreeNode* right;
};
typedef BSTreeNode* NODE ;
typedef BSTreeNode DoubleListNode;
DoubleListNode* dCur;
DoubleListNode* dhead;
void convertToDoubleListNode(BSTreeNode* pCur);
void addTreeNode(BSTreeNode* & pCur,int n) {
if(pCur==NULL) {
BSTreeNode * p = new BSTreeNode;
p->value = n;
p->left = NULL;
p->right = NULL;
pCur = p;
cout<<n<<endl;
}
else {
if(n>pCur->value) {
addTreeNode(pCur->left,n);
}
else {
addTreeNode(pCur->right,n);
}
}
}
void midSearch(BSTreeNode* root) {
if(root->left != NULL)
midSearch(root->left);
convertToDoubleListNode(root);
if(root->right != NULL)
midSearch(root->right);
}
void convertToDoubleListNode(BSTreeNode* pCur) {
if(dhead==NULL) {
dhead= pCur;
dCur = dhead;
}
else {
BSTreeNode p ;
BSTreeNode * q = NULL;
q = &p;
p.left = pCur->left;
p.value = pCur->value;
dCur->right= q;
q->left = dCur;
q->right = NULL;
dCur=q;
}
cout<<dCur->value<<endl;
}
int main() {
BSTreeNode * root = NULL;
dhead = NULL;
dCur = NULL;
addTreeNode(root,2);
addTreeNode(root,10);
addTreeNode(root,8);
addTreeNode(root,16);
addTreeNode(root,6);
addTreeNode(root,14);
addTreeNode(root,12);
midSearch(root);
}
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ /
6 14
/ / / /
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
首先我们定义的二元查找树 节点的数据结构如下:
struct BSTreeNode
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
};
#include <iostream>
#include <stdio.h>
using namespace std;
struct BSTreeNode {
int value;
BSTreeNode* left;
BSTreeNode* right;
};
typedef BSTreeNode* NODE ;
typedef BSTreeNode DoubleListNode;
DoubleListNode* dCur;
DoubleListNode* dhead;
void convertToDoubleListNode(BSTreeNode* pCur);
void addTreeNode(BSTreeNode* & pCur,int n) {
if(pCur==NULL) {
BSTreeNode * p = new BSTreeNode;
p->value = n;
p->left = NULL;
p->right = NULL;
pCur = p;
cout<<n<<endl;
}
else {
if(n>pCur->value) {
addTreeNode(pCur->left,n);
}
else {
addTreeNode(pCur->right,n);
}
}
}
void midSearch(BSTreeNode* root) {
if(root->left != NULL)
midSearch(root->left);
convertToDoubleListNode(root);
if(root->right != NULL)
midSearch(root->right);
}
void convertToDoubleListNode(BSTreeNode* pCur) {
if(dhead==NULL) {
dhead= pCur;
dCur = dhead;
}
else {
BSTreeNode p ;
BSTreeNode * q = NULL;
q = &p;
p.left = pCur->left;
p.value = pCur->value;
dCur->right= q;
q->left = dCur;
q->right = NULL;
dCur=q;
}
cout<<dCur->value<<endl;
}
int main() {
BSTreeNode * root = NULL;
dhead = NULL;
dCur = NULL;
addTreeNode(root,2);
addTreeNode(root,10);
addTreeNode(root,8);
addTreeNode(root,16);
addTreeNode(root,6);
addTreeNode(root,14);
addTreeNode(root,12);
midSearch(root);
}
相关文章推荐
- 微软面试100题 第一题 把二元查找树转变成排序的双向链表
- 微软等数据结构+算法面试100题(43)-- 把二元查找树转变成排序的双向链表
- 微软面试(1/100)---把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表——精选微软经典的算法面试100题中第一题
- 【微软100题】001把二元查找树转变成排序的双向链表(树)
- 把二元查找树转变成排序的双向链表(微软面试)
- 把二元查找树转变成排序的双向链表(JULY微软面试100题系列第一题)的算法思考
- 面试100题:1.把二元查找树转变成排序的双向链表
- 【微软100面试题实现】第01题:把二元查找树转变成排序的双向链表
- (微软100题)把二元查找树转变成排序的双向链表
- (微软100题)1.把二元查找树转变成排序的双向链表
- 微软100题-第一题把二元查找树转变成排序的双向链表
- (微软100题)1.把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表(微软面试题)
- 面试100题:1 把二元查找树转变成排序的双向链表
- 微软100题(1) 二元查找树转变成排序的双向链表
- 程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表—python实现
- 1. 微软面试题:把二元查找树转变成排序的双向链表(树)
- 微软等面试100题筛选答案-1-二元查找树转换成一个排序的双向链表
- 面试100题:1.把二元查找树转变成排序的双向链表