二叉树转换成双向链表

给定一棵二叉树如下:
    
这个题目一看就很简单嘛,因为这棵二叉树是比较正规的二叉树,因此这棵树的遍历的话如果
采用中序遍历,那么正好就是想要的那个链表的序列嘛。但是如何将它们链起来呢?其实
也很单嘛。我们只要将原来中序遍历用来打印的那个地方不断地添加到链表的队尾就可以了啊。
但是这个问题还是难了我不少时间,操。。。没想到会先传入一个链表啊
  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

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





posted @ 2015-07-17 19:26  yml435  阅读(1933)  评论(0编辑  收藏  举报