void PostOrderTraversal(TreeNode * root)
{
    if(root) {
        PostOrderTraversal(root->Left);
        PostOrderTraversal(root->Right);
        std::cout << " " << root->Key<< " " ;
    }
}
void BTree::Print(OrderType Order) const
{
    if(Order ==InOrder)
    {
        std::cout << " InOrder" << std::endl;
        InOrderTraversal(root);
        std::cout << std::endl;
    }
    else if(Order == PostOrder) {
        std::cout << " PostOrder" << std::endl;
        PostOrderTraversal(root);
        std::cout << std::endl;

    }
    else if(Order == PreOrder) {
        std::cout << " PreOrder" << std::endl;
        PreOrderTraversal(root);
        std::cout << std::endl;

    }
    else if(Order == LevelOrder) {
        std::cout << " LevelOrder" << std::endl;
        LevelOrderTraversal(root);
        std::cout << std::endl;
    }
}
Beispiel #3
0
int main()
{
    Node * root =createNode(1);
    root->left = createNode(2);
    root->right = createNode(3);
    root->left->left = createNode(4);
    root->left->right = createNode(5);
    root->right->left = createNode(6);

    PostOrderTraversal(root);
    return 0;
}
void InOrderCreateTree(int Nodes){
	//中序遍历建立一棵Nodes个结点的树 
	enum Last { pop,push } last;
	int i;
	int number = -1;
	char op[5];
	Stack * PtrS = (Stack*)CreateStack();			//这里栈内存放的元素是二叉树(结点) 
	BinTree BT,T;
	
	int first = 1;
	last = push;
	for(i=0;i<2*Nodes;i++){
		scanf("%s",op);
		if( strcmp(op,"Pop")==0 ){
			T = (BinTree)Pop(PtrS);
			last = pop;
		}else if( strcmp(op,"Push")==0 ){
			scanf("%d",&number);
			if( last==push ){
				if( first ){
					BT = CreateTreeNode(number);
					first = 0;
					T = BT;
					Push(PtrS,T);
					continue;
				}
				T->Left = CreateTreeNode(number);
				T = T->Left;
			}else if( last==pop ){
				T->Right = CreateTreeNode(number);
		 		T = T->Right;
			}
			Push(PtrS,T);
			last = push;
		}
//		LevelOrderTraversal(BT);
	}
	
	//PostOrderTraversal
	
	PostOrderTraversal(BT);
	
	free(T);
	free(BT);
	return ;
}