二叉搜索樹非遞歸後序遍歷的嘗試

//非遞歸後序遍歷
void Porder2(BTNode * root) 
{
	BTNode **s;
	BTNode *sr;//右子樹結點訪問標記
	BTNode *p;
	int top = -1;
	int tag = 0;
	
	s = (BTNode **)malloc(100 * sizeof(BTNode *));
	p = root;	
	do{
		while(p && !tag){//有左未訪左    訪左
			s[++top] = p;
			p = p->left;
		}
		p = s[top];
		tag = 0;
		//到這,則無左或訪過左
		if(!p->right || p->right == sr/*sr[topr]*/) //無右或訪過右
		{
			printf("%d ",p->data);
			top--;
			tag = 1;
			sr = p;				
		}
		else //有右未訪過右 
		{		
			p=p->right;
		}
	} while(top != -1);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章