成熟丰满熟妇高潮XXXXX,人妻无码AV中文系列久久兔费 ,国产精品一国产精品,国精品午夜福利视频不卡麻豆

您好,歡迎來到九壹網(wǎng)。
搜索
您的當前位置:首頁轉換一個二叉樹為雙列表

轉換一個二叉樹為雙列表

來源:九壹網(wǎng)

采用中序遍歷,將左子樹中根節(jié)點的前驅節(jié)點和右子樹中根節(jié)點的后繼節(jié)點與根節(jié)點連接。

  1 #include <iostream>
  2 
  3 using namespace std;
  4 
  5 template<class T>
  6 struct tree_node
  7 {
  8     T data;
  9     tree_node * left_child;
 10     tree_node * right_child;
 11 };
 12 
 13 /*************************************************
 14 Function:       // double_stack
 15 Description:    // 二叉樹構建函數(shù),采用遞歸方法
 16                    實現(xiàn)二叉樹到雙列表的轉換。通過
 17                    中序遍歷方法遞歸遍歷整個樹
 18 Input:          // root: 樹根節(jié)點
 19 Return:         // 無
 20 *************************************************/
 21 template<class T>
 22 void recursion(tree_node<T> * root)
 23 {
 24     tree_node<T> *temp;
 25     if(root != NULL)
 26     {
 27         //遍歷左子樹,找到已經(jīng)轉換成列表的左子樹列表中最右邊的一個node
 28         //與root節(jié)點連接成為其左邊節(jié)點
 29         recursion(root->left_child);
 30         temp = root->left_child;        
 31         if(temp != NULL)
 32         {
 33             while(temp->right_child != NULL)
 34             {
 35                 temp = temp->right_child;
 36             }
 37             temp->right_child = root;
 38             root->left_child = temp;
 39         }
 40 
 41         //遍歷右子樹,找到已經(jīng)轉換成列表的左子樹列表中最左邊的一個node
 42         //與root節(jié)點連接成為其左邊節(jié)點
 43         recursion(root->right_child);
 44         temp = root->right_child;
 45         if(temp != NULL)
 46         {
 47             while (temp->left_child != NULL)
 48             {
 49                 temp = temp->left_child;
 50             }
 51             temp->left_child = root;
 52             root->right_child = temp;
 53         }
      }
 55 }
 56 
 57 /*************************************************
 58 Function:       // trans_algorithm
 59 Description:    // 封裝遞歸調(diào)用函數(shù)
 60 Input:          // root 二叉樹根節(jié)點
 61 Return:         // 無
 62 *************************************************/
 63 template<class T>
  void trans_algorithm(tree_node<T> *&root)
 65 {
 66     recursion(root);
 67     if(root != NULL)
 68     {
 69         while(root->left_child != NULL)
 70         {
 71             root = root->left_child;
 72         }
 73     }
 74 }
 75 
 76 /*************************************************
 77 Function:       // insert_node
 78 Description:    // 插入一個樹節(jié)點到一棵樹中
 79 Input:          // root:樹的根節(jié)點
 80                 // data: 樹節(jié)點值
 81 Return:         // 無
 82 *************************************************/
 83 template<class T>
 84 static void insert_node(tree_node<T> *root, T data)
 85 {
 86     tree_node<int> *new_node = new tree_node<int>;
 87     new_node->left_child = NULL;
 88     new_node->right_child = NULL;
      new_node->data = data;
 90     
 91     tree_node<int> *temp, *temp1;
 92     temp = root;
 93     while(temp != NULL)
 94     {
 95         temp1 = temp;
 96         if(temp->data > data)
 97         {                
 98             temp = temp->left_child;
 99         }
100         else
101         {
102             temp = temp->right_child;
103         }
104     }
105     if(temp1->data > data)
106     {
107         temp1->left_child = new_node;
108     }
109     else
110     {
111         temp1->right_child = new_node;
112     }
113 }
114 
115 void main()
116 {    
117     //構建一個排序二叉樹
118     tree_node<int> *root = new tree_node<int>;
119     tree_node<int> *temp, *temp1;
120     root->left_child = NULL;
121     root->right_child = NULL;
122     root->data = 10;    
123     insert_node(root, 6);
124     insert_node(root, 4);
125     insert_node(root, 8);
126     insert_node(root, 3);
127     insert_node(root, 5);
128     insert_node(root, 7);
129     insert_node(root, 9);
130     insert_node(root, 2);
131     insert_node(root, 13);
132     insert_node(root, 12);
133     insert_node(root, 17);
134     insert_node(root, 14);
135     insert_node(root, 16);
136     insert_node(root, 15);
137     insert_node(root, 1);
138     insert_node(root, 20);
139     
140     //調(diào)用轉換函數(shù)
141     trans_algorithm(root);
142     //刪除節(jié)點及節(jié)點分配的內(nèi)存空間
143     while(root != NULL)
144     {
145         cout << root->data << " ";
146         temp = root;
147         root = root->right_child;
148         delete temp;
149     }
150 }

?

轉載于:https://www.cnblogs.com/liuxg/archive/2013/04/08/3007584.html

因篇幅問題不能全部顯示,請點此查看更多更全內(nèi)容

Copyright ? 2019- 91gzw.com 版權所有 湘ICP備2023023988號-2

違法及侵權請聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市萬商天勤律師事務所王興未律師提供法律服務