【题目3】打印二叉树

解题思路: 这是一个很经典的题目,几乎所有的数据结构的书上都可以看到

这个问题的解答,这里参考了《数据结构与算法分析---C语言描述》中的描述

方式。

 

打印一颗二叉树最好的方法还是采用递归的方式,其实解决树和图的最基本方法

也是递归,递归有时候会把我们的脑袋转晕了,按照上面那本书中的说法,练习

递归的最好方法就是多看好的递归的例子,然后自己动手去解决一些经典的例子。

 

源代码:(在VC6下通过编译,正确执行)

 

#include <stdio.h>
#include <stdlib.h>
//树节点
struct TreeNode
{
  TreeNode* left;
  TreeNode* right;
  int value;
};
//中序遍历一个颗二叉树

void PrintTree(TreeNode* T)
{
   if(T != NULL)
   {
      PrintTree(T->left);
      printf("%d ",T->value);
      PrintTree(T->right);
   } 
}
//先序遍历一个颗二叉树
void PrintTreeFirst(TreeNode* T)
{
   if(T != NULL)
   {
   printf("%d ",T->value);
      PrintTreeFirst(T->left);
      PrintTreeFirst(T->right);
   } 
}
//后序遍历一个二叉树
void PrintTreeAfter(TreeNode* T)
{
   if(T != NULL)
   {
      PrintTreeAfter(T->left);
      PrintTreeAfter(T->right);
   printf("%d ",T->value);
   } 
}
//在二叉树上插入一个节点
TreeNode* Insert(TreeNode* T, int value)
{
   if(T == NULL)
   {
       T = (TreeNode*)malloc(sizeof(struct TreeNode));
       if( T == NULL)
          printf("Malloc Failed.");
       else
       {
          T->value  = value;
          T->left = T->right = NULL;
       }
   }
   else if(value < T->value)
         T->left = Insert(T->left,value); 
   else if(value > T->value)
     T->right = Insert(T->right, value);
  return T;
 }

//销毁一颗二叉树

TreeNode* MakeEmpty(TreeNode* T)
{
 if(T != NULL)
 {
  MakeEmpty(T->left);
  MakeEmpty(T->right);
  free(T);
 }
 return NULL;
}
int main()
{
 TreeNode* T = NULL;
 T = Insert(T,45);
 T = Insert(T,21);
 T = Insert(T,5);
 T = Insert(T,23);
 T = Insert(T,11);
 PrintTree(T);//5 11 21 23 45
 printf("/n");
 PrintTreeFirst(T); //45 21 5 11 23
 printf("/n");
 PrintTreeAfter(T); // 11 5 23 21 45
 MakeEmpty(T);//销毁二叉树
 return 0;
}

你可能感兴趣的:(【题目3】打印二叉树)