登 录
dth:100%;">
很多数据结构的书中,都会详细的谈论很多数据结构,比如,线形表,树,图...而实际项目中,最常用的莫过于数组和链表,以及树(最多的还是二叉树),但是这些代码中多以伪代码居多,并且代码不完整,缺少注释。最近对数据结构复习了一阵,对二叉树做一个小结,以下是二叉树的递归代码。
#include <stdlib.h> #include <stdio.h> #include <conio.h> typedef struct BinaryTree { int key; struct BinaryTree *left; struct BinaryTree *right; }Node; Node *InsertNode(Node* root,int val) //定义插入算法,递归定义 { Node* temp; if (root==NULL) //初始判断树是否为空 { temp=(Node* )malloc(sizeof(Node)); root=temp; root->key=val; root->left=NULL; root->right=NULL; } else { if(val<=root->key) root->left=InsertNode(root->left,val); //递归调用 else root->right=InsertNode(root->right,val); } return(root); //返回树根节点指针 } void PrintTree(Node *root) // 打印二叉树,此处是先序 { if (root==NULL) printf("The Tree is Empty!/n"); else { if (root->left!=NULL) PrintTree(root->left); printf("%d ",root->key); if(root->right!=NULL) PrintTree(root->right); } return; } void deleteTree(Node *root) //递归删除二叉树的节点 { if (root->left!=NULL) deleteTree(root->left); if(root->right!=NULL) deleteTree(root->right); deleteTree(root); return; } int main() { int val; Node *tree,*root; root=NULL; tree=NULL; while(1) // 输入为负数时候,输入结束 { scanf("%d",&val); if(val<=0) break; else root=InsertNode(root,val); } PrintTree(root); deleteTree(root); return 0; }
2010-11-19
抱歉!评论已关闭.