二叉树后序遍历递归与非递归实现

//后序遍历(递归)
void postTraverse(TreeNode* node){
	if (node){
		postTraverse(node->left);
		postTraverse(node->right);
		cout << node->val << endl;
	}
}

//后序遍历(非递归)
void postTraverse2(TreeNode* node){
	if (node == NULL)
		cout << "empty!" << endl;
	else{
		stack<TreeNode*> s;
		stack<int> v; // 因为有些结点需要访问两次,所以设置一个标志位

		while (node){
			s.push(node);
			v.push(0);
			root = root->left;
		}
		while (!s.empty()){
			root = s.top();
			while (root->right && v.top() == 0){   //v.top() == 0 表示访问了一次
				v.pop();
				v.push(1);
				root = root->right;
				s.push(root);
				v.push(0);
				while (root->left){
					s.push(root->left);
					v.push(0);
					root = root->left;
				}
			}
			root = s.top();
			cout << root->val << endl;
			s.pop();
			v.pop();
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值