【树】二叉树的非递归遍历(栈&Morris)

本文介绍了二叉树的非递归遍历方法,包括栈和Morris遍历。栈用于实现前序和中序遍历,Morris遍历则利用线索二叉树概念,在不使用额外空间的情况下进行遍历。文章详细讲解了前序、中序和后序遍历的Morris算法,并提供了代码示例,分析了空间和时间复杂度。
摘要由CSDN通过智能技术生成

目录:

1.【树】二叉树的非递归遍历(栈&Morris)

2.【树】二叉树转为双向链表



一、二叉树的非递归遍历【前中的差别只有一句位置不同!  后序最特殊】

两种方法:1.用栈 2.用Morris

栈:

因为所谓的前中后序都是深度优先遍历,所以用栈数据结构。广度(按层/之字)遍历时才用队列数据结构。


例:树从上往下 从左往右是abcdefghi。
前序:a b d h i e c f g
中序:h d i b e a f c g
后序:h i d e b f g c a


三种写法特点:

1.下划线处是内层while循环的依据。

2.外层的while循环体内都是6句:

压入栈

压入vector(后序是插入)

root更新为左子树

root更新为右子树

root = 栈顶

pop栈顶


*********
preorder:
*********
vector<int> PreorderTraversal(TreeNode* root) {
	vector<int> result;
	stack<TreeNode*> nodeStack;
	while (root || !nodeStack.empty()) {
		while (root) {
			nodeStack.push(root); 
			result.push_back(root->val); 
			root = root->left; 
		}
		root = nodeStack.top(); 
		nodeStack.pop();
		
		root = root->right;
	}
	return result;
}
*********
inorder:
*********
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值