1086.Tree Traversals Again

本文介绍了一种非递归方法来实现二叉树的中序遍历,并基于该方法构建二叉树,最后通过递归方式输出二叉树的后序遍历结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题意】
        给出一个非递归输出二叉树中序遍历的方法,根据这种方法建立二叉树并输出此二叉树的后序遍历

【思路】
        找出利用栈输出中序遍历的规律即可建树:
            ·    push时若之前节点无左子树就插在之前节点的左子树上,否则插入右子树;
            ·    pop时要记录弹出的栈顶节点

        后序遍历递归实现即可



#include <iostream>
#include <vector>
#include <stack>
#include <string>
using namespace std;

typedef struct node{
	int value;
	node *left;
	node *right;
	node(int v):value(v),left(NULL),right(NULL){};
}BiNode;

int cnt;

void PostOrderTraversal(BiNode *node){
	if(node->left!=NULL){
		PostOrderTraversal(node->left);
	}
	if(node->right!=NULL){
		PostOrderTraversal(node->right);
	}
	cout << node->value;
	if(--cnt){
		cout << " ";
	}
}

int main(int argc, char const *argv[])
{
	vector<BiNode> nodes;
	stack<BiNode*> ss;
	BiNode *tmp,*head;
	int n;

	cin >> n;
	tmp = NULL;
	for(int i=0; i<2*n; i++){
		string com;
		cin >> com;
		if(com=="Push"){
			int value;
			cin >> value;
			if(tmp==NULL){
				tmp = new BiNode(value);
				head = tmp;
			}
			else if(tmp->left==NULL){
				tmp->left = new BiNode(value);
				tmp = tmp->left;
			}
			else{
				tmp->right = new BiNode(value);
				tmp = tmp->right;
			}
			ss.push(tmp);
		}
		//Pop
		else{
			tmp = ss.top();
			ss.pop();
		}
	}

	cnt = n;
	PostOrderTraversal(head);

	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值