二叉树的遍历C++实现

来源:互联网 发布:儿童编程软件scratch2 编辑:程序博客网 时间:2024/05/16 18:41
strcut BinTree{ElementType Data;BinTree Left;BinTree Right;}//先序遍历递归法:void PreOrderTraversal(BinTree BT){if(BT){cout<<BT->Data;PreOrderTraversal(BT->Left);PreOrderTraversal(BT->Right);}}//中序遍历递归法void InOrderTraversal(BinTree BT){if(BT){PreOrderTraversal(BT->Left);cout<<BT->Data;PreOrderTraversal(BT->Right);}}//后序遍历递归法void PostOderTraversal(BinTree BT){if(BT){PreOrderTraversal(BT->Left);PreOrderTraversal(BT->Right);cout<<BT->Data;}}//中序遍历的非递归算法(堆栈)void InOrderTraversal(BinTree BT){BinTree T=BT;Stack S = CreateStack(MaxSize); //创建并初始化堆栈Swhile( T || !IsEmpty(S)){while(T){                   //向左压栈直到最后一个结点的左结点为NULL后退出循环Push(S,T);T=T->Left;}if(!IsEmpty(S){            //抛出栈顶元素,第一轮抛出叶节点T=Pop(S);cout<<T->Data;T=T->Right;}}}//前序遍历的非递归算法(堆栈)void InOrderTraversal(BinTree BT){BinTree T=BT;Stack S = CreateStack(MaxSize); //创建并初始化堆栈Swhile( T || !IsEmpty(S)){while(T){                   //向左压栈直到最后一个结点的左结点为NULL后退出循环Push(S,T);cout<<T->Data;T=T->Left;}if(!IsEmpty(S){            //抛出栈顶元素,第一轮抛出叶节点T=Pop(S);T=T->Right;}}}//层次遍历(队列)void LevelOrderTraversal(BinTree BT){Queue Q; BinTree T;if(!BT) return;  //若是空树,直接返回Q = CreateQueue(MaxSize);AddQ(Q,BT);while( !IsEmptyQ( Q ) ){T = DeleteQ(Q);cout<<T->Data;if(T->Left) AddQ(Q,T->Left);if(T->Right) AddQ(Q,T->Right);}}

0 0
原创粉丝点击