c++ 非遞歸實現前序,中序,後序遍歷

1.前序非遞歸遍歷

void pretraverse(treenode *root) {
       if (root) {
			stack<treenode *> st;
			treenode *r =root;
			while (!st.empty()||r) {
				while (r) {				
					st.push(r);	
					cout << r->val;
					r = r->left;
				}
				if (!st.empty()) {
					r = st.top();
					
					st.pop();
					r = r->right;
				}
				
			}
		}	
}

2.中序非遞歸遍歷

void intraverse(treenode *root) {
	if (root) {
		stack<treenode *> st;
		treenode *r = root;
		while (!st.empty() || r) {
			while (r) {
				st.push(r);			
				r = r->left;
			}
			if (!st.empty()) {
				r = st.top();
				cout << r->val;
				st.pop();
				r = r->right;
			}

		}
	}
}

3.後序非遞歸遍歷

void postraverse(TreeNode *root) {
	if (root) {
		stack<TreeNode*> st;
		TreeNode* p=root,*r=NULL;
		while (p || !st.empty()) {
			if (p) {
				st.push(p);
				p = p->left;
			}
			else {
				 p = st.top();
				 if(p->right!=NULL&&p->right != r){
					p = p->right;
				 }
				 else {
					 st.pop();
					 cout << p->val;
					 r = p;
					 p = NULL;
				 }
			}
		}

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