二叉树的遍历及实现

简介:
树是一种非线性的二维数据结构。

    这里要说的是一种特殊的二叉树,叫对分查找树。特点在于:左子树的所有值都比根节点小,右子树的所有值都比根节点大。

    对分查找树的三种遍历:

    中序遍历(inOrder)        遍历左子树;处理节点中的值;遍历右子树。

    前序遍历(preOrder)     处理节点中的值;遍历左子树;遍历右子树。

    后序遍历(postOrder)   遍历左子树;遍历右子树;处理节点中的值。

注意的是,对分查找树中序遍历的结果是对数列进行升序排列。因此中序遍历又叫二叉树排序。

   下面的程序说明对分查找树的生成和三种遍历的实现。

/*author:zhanglin*/

#include
#include
#include .h>.h>.h>

struct treeNode{
 struct treeNode *leftPtr;
 int data;
 struct treeNode *rightPtr;
};

typedef struct treeNode TreeNode;
typedef TreeNode *TreeNodePtr;

void insertNode(TreeNodePtr *, int);
void inOrder(TreeNodePtr);
void preOrder(TreeNodePtr);
void postOrder(TreeNodePtr);

int main(){
 int i, item;
 TreeNodePtr rootPtr= NULL;

 srand(time(NULL));

 /*insert random values between 1 and 15 in the tree*/
 printf("the number being placed in the tree are:\n");
 for(i=0; i<10;i++){
  item = rand()%15;
  printf("%3d", item);
  insertNode(&rootPtr, item);
 }

 /*traverse the tree in inOrder*/
 printf("\ntraverse the tree in inOrder\n");
 inOrder(rootPtr);

 /*traverse the tree in preOrder*/
 printf("\ntraverse the tree in preOrder\n");
 preOrder(rootPtr);

 /*traverse the tree in postOrder*/
 printf("\ntraverse the tree in postOrder\n");
 postOrder(rootPtr);

 return 0;

}

void insertNode(TreeNodePtr *ptr, int value){
 if(*ptr==NULL){
  *ptr = (TreeNodePtr)malloc(sizeof(TreeNode));

  if(*ptr!=NULL){
            (*ptr)->data = value;
   (*ptr)->leftPtr = NULL;
   (*ptr)->rightPtr = NULL;
  }else{
   printf("\nerror. No memory available\n");
  }
 }else{
  if(value<(*ptr)->data){
   insertNode(&((*ptr)->leftPtr), value);
  }else if(value>(*ptr)->data){
            insertNode(&((*ptr)->rightPtr), value);
  }else{
            printf("\nduplicate data\n");
  }
 }
}

void inOrder(TreeNodePtr ptr){
 if(ptr!=NULL){
   inOrder(ptr->leftPtr);
   printf("%3d", ptr->data);
   inOrder(ptr->rightPtr);
 }
}

void preOrder(TreeNodePtr ptr){
 if(ptr!=NULL){
   printf("%3d", ptr->data);
   preOrder(ptr->leftPtr);
   preOrder(ptr->rightPtr);
 }
}

void postOrder(TreeNodePtr ptr){
 if(ptr!=NULL){
   postOrder(ptr->leftPtr);
   postOrder(ptr->rightPtr);
   printf("%3d", ptr->data);
 }
}

专注于企业信息化,最近对股票数据分析较为感兴趣,可免费分享股票个股主力资金实时变化趋势分析工具,股票交流QQ群:457394862
分类: C/C++

本文转自沧海-重庆博客园博客,原文链接:http://www.cnblogs.com/omygod/archive/2006/11/08/554699.html,如需转载请自行联系原作者
目录
相关文章
|
7月前
|
Python
二叉树前中后序遍历
这段内容是关于二叉树的前序、中序和后序遍历的Python实现。`Solution`类包含三个方法:`preorderTraversal`、`inorderTraversal`和`postorderTraversal`,分别返回二叉树节点值的前序、中序和后序遍历列表。每个方法都是递归的,遍历顺序为:前序(根-左-右)、中序(左-根-右)、后序(左-右-根)。
62 4
|
7月前
二叉树遍历及应用
二叉树遍历及应用
82 0
|
7月前
|
算法
带你深入理解二叉树的遍历
带你深入理解二叉树的遍历
|
7月前
【二叉树遍历和练习】
【二叉树遍历和练习】
58 0
|
算法
25 二叉树的遍历
25 二叉树的遍历
29 0
|
存储
二叉树的遍历问题
二叉树的遍历问题
|
C++
【C++】二叉树的遍历:前序、中序、后序、层序
【C++】二叉树的遍历:前序、中序、后序、层序
215 0
【C++】二叉树的遍历:前序、中序、后序、层序