首页 > 代码库 > IT公司100题-1
IT公司100题-1
1 // 题目: 2 // 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 3 // 要求不能创建任何新的结点,只调整指针的指向。 4 5 // 10 6 // / / 7 // 6 14 8 // / / / / 9 // 4 8 12 1610 11 // 转换成双向链表12 // 4=6=8=10=12=14=16。13 14 #include <iostream>15 using namespace std;16 17 class Node{18 public:19 int data;20 Node *left;21 Node *right;22 23 Node(int d = 0, Node *lr = 0, Node *rr = 0):data(d), left(lr), right(rr){}24 };25 26 Node *create()27 {28 Node *root;29 Node *p4 = new Node(4);30 Node *p8 = new Node(8);31 Node *p6 = new Node(6, p4, p8);32 33 Node *p12 = new Node(12);34 Node *p16 = new Node(16);35 Node *p14 = new Node(14, p12, p16);36 37 Node *p10 = new Node(10, p6, p14);38 root = p10;39 40 return root;41 }42 43 Node *change(Node *p, bool asRight)44 {45 if (!p)46 return NULL;47 Node *pLeft = change(p->left, false);48 if (pLeft)49 pLeft->right = p;50 p->left = pLeft;51 52 Node *pRight = change(p->right, true);53 if (pRight)54 pRight->left = p;55 p->right = pRight;56 57 Node *r = p;58 if (asRight)59 {60 while (r->left)61 r = r->left;62 }else{63 while (r->right)64 r = r->right;65 }66 return r;67 }68 69 int main(){70 Node *root = create();71 Node *tail = change(root, false);72 while (tail)73 {74 cout << tail->data << " ";75 tail = tail->left;76 }77 cout << endl;78 79 root = create();80 Node *head = change(root, true);81 while (head)82 {83 cout << head->data << " ";84 head = head->right;85 }86 cout << endl;87 return 1;88 }
IT公司100题-1
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。