二叉树转换成双向链表

本文介绍了一种将二叉树转换为双向链表的方法。通过递归地进行中序遍历,调整节点指针形成链表。适用于正规二叉树结构。
给定一棵二叉树如下:
    
这个题目一看就很简单嘛,因为这棵二叉树是比较正规的二叉树,因此这棵树的遍历的话如果
采用中序遍历,那么正好就是想要的那个链表的序列嘛。但是如何将它们链起来呢?其实
也很单嘛。我们只要将原来中序遍历用来打印的那个地方不断地添加到链表的队尾就可以了啊。
但是这个问题还是难了我不少时间,操。。。 没想到会先传入一个链表啊
171925341261898.png源代码:

   
  1. #ifndef TREE_TOULIST_H
  2. #define TREE_TOULIST_H
  3. #include"reconstructBinaryTree.h"
  4. void convertNode(TreeNode *t_node,TreeNode **plastNodeList);
  5. TreeNode* treeToduTree(TreeNode **head);
  6. TreeNode* treeToduTree(TreeNode **head){
  7. if((*head)==NULL||head==NULL){
  8. return NULL;
  9. }
  10. TreeNode *root=NULL;
  11. convertNode(*head,&root);
  12. while(root!=NULL&&root->left!=NULL){
  13. root=root->left;
  14. }
  15. return root;
  16. }
  17. void convertNode(TreeNode *t_node,TreeNode **plastNodeList){
  18. if(t_node==NULL){
  19. return;
  20. }
  21. if(t_node->left!=NULL){
  22. convertNode(t_node->left,plastNodeList);
  23. }
  24. t_node->left=*plastNodeList;
  25. if(*plastNodeList!=NULL){
  26. (*plastNodeList)->right=t_node;
  27. }
  28. *plastNodeList=t_node;
  29. if(t_node->right!=NULL){
  30. convertNode(t_node->right,plastNodeList);
  31. }
  32. }
  33. #endif

171925341261898.png

  
  1. t_node->left=*plastNodeList;
  2. if(*plastNodeList!=NULL){
  3. (*plastNodeList)->right=t_node;
  4. }
  5. *plastNodeList=t_node;
关键的代码嘛,你看看,无非就是往双向链表中不停地添加无素摆了。





转载于:https://www.cnblogs.com/yml435/p/4655481.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值