• 二叉树转换成双向链表


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





  • 相关阅读:
    Web调用Linux客户端remmina运维
    前端和后端连载一起启动
    react redux 二次开发流程
    快上车,react 入门拾遗
    吐血整理!这篇带你彻底理解主存中存储单元地址的分配
    大学四年走来,这些网络工程师必备的模拟器我都给你整理好了
    主存、辅存、内存、外存、存储器是什么?还傻傻分不清楚?看完这一篇就够了
    一分钟理解系列—半导体存储芯片的知识点总结
    小白入门NAS—快速搭建私有云教程系列(一)
    五分钟理解主存储器的基本组成结构
  • 原文地址:https://www.cnblogs.com/yml435/p/4655481.html
Copyright © 2020-2023  润新知