二叉树的建立,前序遍历,中序遍历,后序遍历

来源:互联网 发布:ubuntu wordpress 安装 编辑:程序博客网 时间:2024/05/16 14:28

前序遍历:先根节点,后左子树,最后右子树。

中序遍历:先左子树,后根节点,最后右子树。

后序遍历:先左子树,后右子树,最后根节点。

由上可以看出,无论哪种遍历方法左节点总是在右节点的前面,如何区分是前中后,主要看根节点位于哪个位置。


上面二叉树前序遍历:2 3 4 5 6 7 8

中序遍历;4 3 5 2 7 6 8 

后序遍历:4 5 3 7 8 6 2

#include<stdio.h>#include<stdlib.h>struct treenode{int data;treenode *left;treenode *right;};treenode* createTree();//建立二叉树void showTreeAhead(treenode *root);//前序遍历void showTreeMiddle(treenode *root);//中序遍历void showTreeAfter(treenode *root);//后序遍历void rank(treenode *root);//堆排序int main(){treenode *root;root = createTree();printf("二叉树建立完成\n");printf("前序遍历\n");showTreeAhead(root);printf("\n中序遍历\n");showTreeMiddle(root);printf("\n后序遍历\n");showTreeAfter(root);system("pause");}/*建立二叉树的时候。注意将叶子节点的下面左右节点赋值-1(也就是为NULL)*/treenode* createTree(){int d = 0;treenode *root;scanf_s("%d", &d);if (d > 0){root = (treenode*)malloc(sizeof(treenode));root->data = d;root->left = createTree();root->right = createTree();}else{ root = NULL;}return root;}void showTreeAhead(treenode *root){if (root != NULL){printf("%d  ", root->data);showTreeAhead(root->left);showTreeAhead(root->right);}}void showTreeMiddle(treenode *root){if (root != NULL){showTreeMiddle(root->left);printf("%d  ", root->data);showTreeMiddle(root->right);}}void showTreeAfter(treenode *root){if (root != NULL){showTreeAfter(root->left);showTreeAfter(root->right);printf("%d  ", root->data);}}void rank(treenode *root){}
上面中用到了scanf_s因为用的VS编写程序。功能与scanf一样

0 0
原创粉丝点击