二叉树的创建、先根、中根、后根遍历

来源:互联网 发布:濮阳市公务员网络培训 编辑:程序博客网 时间:2024/05/19 17:57

树的定义:

是n个结点的有限集n=O 时称为空树在任意-棵非空树中: (1 )有且仅有一·个特定的根点: (2)若干子树(互不相交) 

树的定义是递归定义的

二叉树( Binary Tree) 是 n个结点的有限集合,该集合或者为空集(称为空二叉树),戴者由一个根结点和两颗互不相交的、分别称为根结点的左子树和右子树的二叉树组成

二叉树结点的定义:

typedef char elemtype;typedef struct BtNode{elemtype data;BtNode *leftchild;BtNode *rightchild;}BtNode,*BinaryTree;
下图二叉树的遍历:


先根遍历: ABCDEFGH

中根遍历:CBEDFAGH

后根遍历 : CEFDBHGA

二叉树的创建:

BtNode * creat_tree(){elemtype x;cin>>x;BtNode *p = NULL;if (x != '#'){p = Buynode();p->data = x;p->leftchild = creat_tree();p->rightchild = creat_tree();}return p;}
字符'#'表示左孩子或右孩子为空。先创建根结点,在递归创建左子树和右子树

二叉树遍历:

//先序遍历二叉树void PreOrder(BtNode *ptree){if (ptree != NULL){cout<<ptree->data<<" ";PreOrder(ptree->leftchild);PreOrder(ptree->rightchild);}}//中序遍历二叉树void InOrder(BtNode *ptree){if (ptree != NULL){InOrder(ptree->leftchild);cout<<ptree->data<<" ";InOrder(ptree->rightchild);}}//后序遍历二叉树void PastOrder(BtNode *ptree){if (ptree != NULL){PastOrder(ptree->leftchild);PastOrder(ptree->rightchild);cout<<ptree->data<<" ";}}

测试代码:

void main(){BinaryTree tree1;tree1 = creat_tree();PreOrder(tree1);cout<<endl;InOrder(tree1);cout<<endl;PastOrder(tree1);}

测试结果如图:


0 0