标签:style blog http color io strong ar 2014
二叉树相关概念:
二叉树相关性质:
(1)如果2i<=n,则序号为i的节点的左孩子节点的序号为2i;如果2i>n,则序号为i的节点无左孩子;
(2)如果2i+1<=n,则i节点有孩子序号为2i+1,如果2i+1>n,则i无右孩子。
二叉树的遍历:
1、先序遍历:先序遍历是先输出根节点,再输出左子树,最后输出右子树。上图的先序遍历结果就是:ABCDEF
2、中序遍历:中序遍历是先输出左子树,再输出根节点,最后输出右子树。上图的中序遍历结果就是:CBDAEF
3、后序遍历:后序遍历是先输出左子树,再输出右子树,最后输出根节点。上图的后序遍历结果就是:CDBFEA
#include <stdio.h> #include <stdlib.h> typedef char TelemType; typedef struct TNode { TelemType data; struct TNode *lchild,*rchild; } BitNode; //声明 BitNode* createTree(void); void preOrderTraverse(BitNode *); void inOrderTraverse(BitNode *); void lastOrderTraverse(BitNode *); int main(int agrc,char *argv[]) { BitNode *root=NULL; root=createTree(); printf("\n先序遍历二叉树:"); preOrderTraverse(root); printf("\n中序遍历二叉树:"); inOrderTraverse(root); printf("\n后序遍历二叉树:"); lastOrderTraverse(root); return 0; } //创建二叉树 BitNode* createTree(void) { BitNode *b; TelemType ch; scanf("%c",&ch); if(ch==‘#‘) { b=NULL; } else { b=(BitNode *)malloc(sizeof(BitNode)); b->data=ch; b->lchild=createTree(); b->rchild=createTree(); } return b; } //先序遍历 void preOrderTraverse(BitNode *root) { if(root) { printf("%c",root->data); preOrderTraverse(root->lchild); preOrderTraverse(root->rchild); } } //中序遍历 void inOrderTraverse(BitNode *root) { if(root) { inOrderTraverse(root->lchild); printf("%c",root->data); inOrderTraverse(root->rchild); } } //后序遍历 void lastOrderTraverse(BitNode *root) { if(root) { lastOrderTraverse(root->lchild); lastOrderTraverse(root->rchild); printf("%c",root->data); } }
输出结果如下图:
标签:style blog http color io strong ar 2014
原文地址:http://www.cnblogs.com/mu-tou-man/p/3908350.html