剑指offer 36. 二叉搜索树与双向链表

二叉搜索树的先序遍历序列是递增序列
设置pre指针来记录上一次访问结果

1
/* 2 // Definition for a Node. 3 class Node { 4 public: 5 int val; 6 Node* left; 7 Node* right; 8 9 Node() {} 10 11 Node(int _val) { 12 val = _val; 13 left = NULL; 14 right = NULL; 15 } 16 17 Node(int _val, Node* _left, Node* _right) { 18 val = _val; 19 left = _left; 20 right = _right; 21 } 22 }; 23 */ 24 class Solution { 25 private: 26 Node * pre ; 27 Node * head; 28 Node * last ; 29 30 public: 31 Node* treeToDoublyList(Node* root) { 32 if(root ==NULL) 33 return NULL; 34 pre = NULL; 35 head = NULL; 36 last =NULL; 37 visit(root); 38 head->left = pre; 39 pre->right = head; 40 return head; 41 42 43 } 44 void visit(Node* root) 45 { 46 if(root == NULL) 47 return; 48 visit(root->left); 49 if(head == NULL) 50 { 51 head = root; 52 pre = root; 53 } 54 else 55 { 56 pre->right = root; 57 root->left = pre; 58 pre = root; 59 } 60 visit(root->right); 61 } 62 };

 

posted @ 2022-01-12 21:49  BohrCh  阅读(29)  评论(0)    收藏  举报