二叉树的建立、删除及三种遍历的C++实现 教材上的Tree类写法太累赘,不实用,将树节点直接写成结构体即可 要理解结点的含义以及根结点的重要意义 #include <stdio.h> #include <stdlib.h> //用CPP文件编写,否则编译出错,需要加struct且delete不识别 struct TreeNode { int val; TreeNode * left, * right; }; TreeNode * insertTree(TreeNode * root,int val){//insert new node,return root TreeNode * newNode; if (root == NULL) { newNode = new TreeNode; newNode -> val = val; newNode -> left = NULL; newNode -> right = NULL; return newNode; } if (val < root ->val) root ->left = insertTree(root ->left,val); else root ->right = insertTree(root ->right,val); return root; } void delTree(TreeNode * root){ if(root -> left != NULL) delTree(root -> left); if(root -> right != NULL) delTree(root ->right); delete root; return; } void FLRTraverse(TreeNode * root) {//先序遍历 printf("%d/n",root -> val); if(root -> left != NULL) FLRTraverse(root -> left); if(root -> right != NULL) FLRTraverse(root -> right); return; } void LFRTraverse(TreeNode * root) {//中序遍历 if(root -> left != NULL) LFRTraverse(root -> left); printf("%d/n",root -> val); if(root -> right != NULL) LFRTraverse(root -> right); return; } void LRFTraverse(TreeNode * root) {//后序遍历 if(root -> left != NULL) LRFTraverse(root -> left); if(root -> right != NULL) LRFTraverse(root -> right); printf("%d/n",root -> val); return; } void main(){ //始终记住根是对树而言最重要的结点 FILE * fin; TreeNode *root; int val; fin = fopen("data.txt","r"); root = NULL; while(fscanf(fin,"%d",&val) != EOF) root = insertTree(root,val); fclose(fin); printf("先序遍历:/n"); FLRTraverse(root); printf("/n"); printf("中序遍历:/n"); LFRTraverse(root); printf("/n"); printf("后序遍历:/n"); LRFTraverse(root); printf("/n"); delTree(root); return; }