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

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

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

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

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

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

上面二叉树前序遍历: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)
{
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/af9aa48dcb89970146595a3a0e79f2cf.html