二叉树

来源:互联网 发布:javascript 按位取反 编辑:程序博客网 时间:2024/06/05 15:09

二叉树是的每个节点的度都不超过2,二叉树的左右两个节点是有序的,所以二叉树可以用有序的编号来表示节点,假设编号为1的是根节点,那么节点A的做节点编号是A/2,右节点的编号是A/2+1.我们可以用一个数组来表示节点编号。二叉树的遍历通常用递归方法。

 

// 二叉树.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#define MAX 5struct  TreeNode{int data;struct  TreeNode *Lchild;    struct  TreeNode *Rchild; };TreeNode *CreateTree(){TreeNode **BTree;BTree=(TreeNode**)malloc(sizeof(TreeNode*)*MAX);for(int i=1;i<=MAX;i++){TreeNode *node=(TreeNode*)malloc(sizeof(TreeNode));cin>>node->data;node->Lchild=NULL;node->Rchild=NULL;BTree[i]=node;if(i!=1){if(i%2==0)BTree[i/2]->Lchild=node;elseBTree[i/2]->Rchild=node;}}return BTree[1];}void CreateTree1(TreeNode *&node){int a;cin>>a;if(a==0)node=NULL;else{node=(TreeNode*)malloc(sizeof(TreeNode));node->data=a;TreeNode L;TreeNode R;CreateTree1(node->Lchild);CreateTree1(node->Rchild);}}void aheadTree(TreeNode *node){if(node!=NULL){cout<<node->data<<endl;aheadTree(node->Lchild);aheadTree(node->Rchild);}}void BehindTree(TreeNode *node){if(node!=NULL){BehindTree(node->Lchild);BehindTree(node->Rchild);cout<<node->data<<endl;}}void MidTree(TreeNode *node){if(node!=NULL){MidTree(node->Lchild);cout<<node->data<<endl;MidTree(node->Rchild);}}int _tmain(int argc, _TCHAR* argv[]){//TreeNode *node=CreateTree();//cout<<"-----------前序遍历--------------"<<endl;//aheadTree(node);//cout<<"-----------中序遍历--------------"<<endl;//MidTree(node);//cout<<"-----------后序遍历--------------"<<endl;//BehindTree(node);TreeNode *node=NULL;CreateTree1(node);cout<<"-----------前序遍历--------------"<<endl;aheadTree(node);cout<<"-----------中序遍历--------------"<<endl;    MidTree(node);cout<<"-----------后序遍历--------------"<<endl;BehindTree(node);return 0;}