二叉搜索树非递归后序遍历的尝试

//非递归后序遍历
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);
}

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