二叉树转双向链表

rt 直接贴代码


#include <iostream>
#include <string>

using namespace std;

typedef struct Node{
  int value;
  Node *left;
  Node *right;
} Node;

void visitRight(Node *root){
  Node *cur = root;
  while(cur){
    cout<<cur->value<<" ";
    cur = cur->right;
  }
}

void visitLeft(Node *root){
  Node *cur = root;
  while(cur){
    cout<<cur->value<<" ";
    cur = cur->left;
  }
}

//

void trival(Node *root, Node *&head, Node *&tail){
  if(root->left==NULL && root->right==NULL){
    head=tail=root;
    return;
  }
  Node *tl, *tr;
  if(root->left){
    trival(root->left, tl, tr);
    head=tl;
    root->left=tr;
    tr->right=root;
  }
  else{
    head = root;
  }

  if(root->right){
    trival(root->right, tl, tr);
    tail=tr;
    root->right=tl;
    tl->left=root;
  }
  else{
    tail=root;
  }

}


int main(){
  Node *head, *tail;

/
  Node r, l1, r1, l2, l3, l4, r4, r5;
  r.value=1; l1.value=2; r1.value=3; l2.value=4; l3.value=5; l4.value=6; r4.value=7; r5.value=8;
  r.left=&l1; r.right=&r1;
  l1.left=&l2; l1.right=NULL;
  l2.left=l2.right=NULL;
  r1.left=&l3; r1.right=NULL;
  l3.left=&l4; l3.right=&r4;
  l4.left=l4.right=NULL;
  r4.left=NULL; r4.right=&r5;
  r5.left=r5.right=NULL;

//
//         r             1
//        / \           / \
//       l1  r1        2   3
//      /   /         /   /
//     l2  l3        4   5
//         / \          / \
//        l4 r4        6   7
//            \             \
//             r5            8
/

  trival(&r, head, tail);
  visitRight(head);
  cout<<endl;

  visitLeft(tail);
  cout<<endl;

  return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值