#include <iostream>
using namespace std;
// 树节点
struct node
{
int val;
struct node* left;
struct node* right;
node(int t)
{
val = t;
left = right = 0;
}
};
typedef struct node* link;
// 构造树
void insert_tree(link &h, int t)
{
if (0 == h)
{
h = new node(t);
return;
}
if (h->val > t)
insert_tree(h->left, t);
else
insert_tree(h->right, t);
}
// 二叉树转链表
link tree_to_listR(link &h, bool left)
{
if (0 == h)
{
return 0;
}
link p = tree_to_list(h->left, true);
link q = tree_to_list(h->right, false);
if (0 == p && 0 == q) return h;
link t, tt;
if (0 != p)
{
tt = t = p;
h->left = p;
p->right = h;
}
if (0 != q)
{
tt = t = q;
h->right = q;
q->left = h;
}
while (tt->left != 0) tt = tt->left;
while (t->right != 0) t = t->right;
if (left) return t;
else return tt;
}
link tree_to_list(link &h)
{
return tree_to_listR(h, false);
}
int main(int argc, char* argv[])
{
link h = 0;
insert_tree(h, 5);
insert_tree(h, 6);
insert_tree(h, 4);
insert_tree(h, 3);
insert_tree(h, 7);
insert_tree(h, 8);
insert_tree(h, 9);
insert_tree(h, 2);
insert_tree(h, 1);
link head = tree_to_list(h);
return 0;
}
二叉树转双向链表
最新推荐文章于 2025-03-04 11:21:48 发布