1 #include <iostream>
  2
  3 //定义树的数据结构
  4 struct BiTNode
  5 {
  6     int data;
  7     struct BiTNode *lchild, *rchild;
  8 };
  9
 10 typedef struct BiTNode  BiTNode;
 11 typedef struct BiTNode* BiTree;
 12
 13
 14 //前序遍历
 15 void preOrder(BiTNode *root)
 16 {
 17     if (root == NULL)
 18     {
 19         return;
 20     }
 21     printf("%d ", root->data);
 22     preOrder(root->lchild);
 23     preOrder(root->rchild);
 24 }
 25
 26 //中序遍历
 27 void inOrder(BiTNode *root)
 28 {
 29     if (root == NULL)
 30     {
 31         return;
 32     }
 33     inOrder(root->lchild);
 34     printf("%d ", root->data);
 35     inOrder(root->rchild);
 36 }
 37 //后序遍历
 38 void posOrder(BiTNode *root)
 39 {
 40     if (root == NULL)
 41     {
 42         return;
 43     }
 44     posOrder(root->lchild);
 45     posOrder(root->rchild);
 46     printf("%d ", root->data);
 47 }
 48 //创建拷贝函数
 49 BiTNode* CopyTree(BiTNode *root)
 50 {
 51     BiTNode *newNode = NULL;
 52     BiTNode *newLc = NULL;
 53     BiTNode *newRc = NULL;
 54
 55     if (root == NULL)
 56     {
 57         return NULL;
 58     }
 59     //拷贝左子树
 60     if (root->lchild != NULL)
 61     {
 62         newLc = CopyTree(root->lchild);
 63     }
 64     else
 65     {
 66         newLc = NULL;
 67     }
 68
 69     //拷贝右子树
 70     if (root->rchild != NULL)
 71     {
 72         newRc = CopyTree(root->rchild);
 73     }
 74     else
 75     {
 76         newRc = NULL;
 77     }
 78
 79     //创建动态内存
 80     newNode = (BiTNode * )malloc(sizeof(BiTNode));
 81     if (newNode == NULL)
 82     {
 83         return NULL;
 84     }
 85
 86     newNode->lchild = newLc;
 87     newNode->rchild = newRc;
 88     newNode->data = root->data;
 89
 90     return newNode;
 91 }
 92
 93
 94
 95 void main()
 96 {
 97     BiTNode t1, t2, t3, t4, t5;
 98     memset(&t1, 0, sizeof(BiTNode));
 99     memset(&t2, 0, sizeof(BiTNode));
100     memset(&t3, 0, sizeof(BiTNode));
101     memset(&t4, 0, sizeof(BiTNode));
102     memset(&t5, 0, sizeof(BiTNode));
103     t1.data = 1;
104     t2.data = 2;
105     t3.data = 3;
106     t4.data = 4;
107     t5.data = 5;
108
109     t1.lchild = &t2;
110     t1.rchild = &t3;
111     t2.lchild = &t4;
112     t2.rchild = &t5;
113     printf("Old Tree's preOrder:\n");
114     preOrder(&t1);
115     printf("\n");
116     printf("Old Tree's inOrder:\n");
117     inOrder(&t1);
118     printf("\n");
119     printf("Old Tree's posOrder:\n");
120     posOrder(&t1);
121     printf("\n");
122     printf("Old Tree:\n");
123     preOrder(&t1);
124     printf("\n");
125     BiTNode* newTree = CopyTree(&t1);
126     printf("New Tree:\n");
127     preOrder(newTree);
128
129
130     system("pause");
131 }

转载于:https://www.cnblogs.com/Lxk0825/p/9519983.html

二叉树的递归遍历与复制相关推荐

  1. C语言-数据结构-二叉树的递归遍历和非递归遍历

    看了大量网络相关的理论和程序,多数的C++ 写的,这里使用devC++ 编程语言 C语言; 整合王道考研答案和理论, 还有小甲鱼的数据结构, 郝斌的数据结构,各有特点吧 最值得研究的还是后序遍历的非递 ...

  2. 二叉树的递归遍历和层序遍历(c/c++)

    递归遍历: 二叉树的三种递归遍历为先序遍历,中序遍历和后续遍历.它们相似之处在于都是对二叉树的递归遍历且对任何一个结点都经过三次,区别之处在于哪一次对该结点进行访问,由此分为先,中,后序遍历.所以对于 ...

  3. C++版二叉树非递归遍历

    C++版二叉树非递归遍历 文章目录 C++版二叉树非递归遍历 一.二叉树前序遍历 二.二叉树中序遍历 三.二叉树后序遍历 一.二叉树前序遍历 /*** Definition for a binary ...

  4. 一种二叉树非递归遍历的简单写法

    一种二叉树非递归遍历的简单写法 目录 一种二叉树非递归遍历的简单写法 先序遍历 中序遍历 后序遍历 二叉树的遍历是数据结构中非常基础的一个知识点,也是面试手撕代码环节的一个常见题目.这个问题的递归写法 ...

  5. 二叉树非递归遍历(模版)

    读完本篇内容大约花费您7分钟时间 本文主要讲解二叉树非递归遍历,由于是非递归遍历,所以需要用到栈stack,我们如果仔细考虑递归遍历的代码,就能明白非递归种栈的应用. 由于几种遍历方式只是在处理中间节 ...

  6. 二叉树的递归遍历和非递归遍历实现(C++)(深度优先)

    二叉树的递归遍历和非递归遍历(C++) 二叉树的遍历方式可分为先序遍历,中序遍历和后序遍历 先序遍历:先遍历根节点,再遍历左子节点,最后遍历右子节点. 中序遍历:先遍历左子节点,再遍历根节点,最后遍历 ...

  7. 代码随想录day13|二叉树理论基础、二叉树的递归遍历、二叉树的迭代遍历

    二叉树理论基础 这边需要重点注意的是二叉树的链式节点的定义 struct TreeNode(){int val;TreeNode *left;TreeNode *right;TreeNode(int ...

  8. 数据结构——二叉树的递归遍历算法与非递归遍历算法+层次遍历算法

    (文章篇幅有点长,二叉树的递归遍历算法不作详细分析,但是二叉树的非递归遍历算法和层次遍历算法都有非常详细的分析过程,记得往下翻哦!) 二叉树的递归遍历算法实现 我们首先用递归的方法先序遍历创建这样一棵 ...

  9. 二叉树非递归遍历的经典求解

    #include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct node {dataty ...

最新文章

  1. MySQL Replace INTO的使用
  2. linux joe复制一行,Linux joe命令
  3. JavaScript高级程序设计学习笔记--引用类型
  4. SVM支持向量机--sklearn研究
  5. Mule与Servicemix比较
  6. javaScriptDay01
  7. 【python数据挖掘课程】二十四.KMeans文本聚类分析互动百科语料
  8. [react] 怎样动态导入组件?
  9. mysql主从复制不同步案例_Mysql主从不同步问题处理案例
  10. (项目)在线教育平台(六)
  11. ASE光源 ASE噪声
  12. 最容易“杀死”女人的30句话
  13. SqlServer 存贮过程操作类
  14. Week 10 homework
  15. 常用正则表达式匹配(中文字符)
  16. 华为新机Mate30参数解析,这些参数你都知道是什么意思吗?
  17. 安卓基础框架与四大组件分析
  18. 开机时HP Hotkey UWP Service占用内存过高
  19. 艾艾贴Mysql主从同步
  20. 如何优雅高效地使用Python——这些Python技巧你必须学会!

热门文章

  1. Java中的do-while循环——通过示例学习Java编程(11)
  2. tensorflow中的Supervisor
  3. C++入门经典-例2.13-左移运算
  4. Linux基础练习题(二)
  5. 百度地图no result available_【整理之路二】百度地图的路径规划和调用本机地图导航...
  6. nginx根据参数转发到不同服务器_Nginx服务器之负载均衡策略
  7. linux安装虚拟环境virtualenv
  8. 三态门三个状态vhdl_温故知新,高阻态和三态门
  9. 前端开发必备的1个CSS框架
  10. mysql binary blob区别_SQL中binary 和 varbinary的区别 blob