zoukankan      html  css  js  c++  java
  • 二叉树的递归遍历与复制

      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:
    ");
    114     preOrder(&t1);
    115     printf("
    ");
    116     printf("Old Tree's inOrder:
    ");
    117     inOrder(&t1);
    118     printf("
    ");
    119     printf("Old Tree's posOrder:
    ");
    120     posOrder(&t1);
    121     printf("
    ");
    122     printf("Old Tree:
    ");
    123     preOrder(&t1);
    124     printf("
    ");
    125     BiTNode* newTree = CopyTree(&t1);
    126     printf("New Tree:
    ");
    127     preOrder(newTree);
    128  
    129  
    130     system("pause");
    131 }
  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    数据库作业15:关系数据理论
    IPv6 — 实践
    Provisional headers are shown 说明走了缓存没有发送请求
  • 原文地址:https://www.cnblogs.com/Lxk0825/p/9519983.html
Copyright © 2011-2022 走看看