算法导论12.2-7.P165另一种非递归的中序遍历二叉树的办法

本文介绍了非递归方式实现二叉树的中序遍历,首先通过minimum找到最小关键字节点,然后利用tree_successor寻找每个节点的后继,即大于当前节点关键字的最小节点。minimum通过左遍历找到最左边叶子节点,tree_successor分为有右子树和无右子树两种情况,无右子树时寻找最底层祖先作为后继。整个过程迭代进行,依次输出节点。
摘要由CSDN通过智能技术生成

思路比较简单:

就是先调用minimum找到二叉树中的最小关键字的结点,即二叉树最左边的树叶,然后依然迭代地调用tree_successor寻找前一个结点x的后继:即比x->key大的所有关键字中最小的一个的节点。依次输出即可。

minimum很容易理解,利用蛮力一直往左遍历,到底即可。

tree_successor分两种情况,如果x有右子树,则x的后继就是右子树中最小关键字的那个结点,如果x没有右子树,则后继是x的最底层祖先。最底层祖先听着很拗口,用图示表示就是:13号结点的后继是15,15即为13的后继,13的祖先有15和30,而15为13的最底层祖先。

代码:

#include<iostream>
using namespace std;
struct node//结点
{
	int key;
	node* p;
	node* left;
	node* right;
	node(){}
	node(int k):key(k),p(NULL),left(NULL),right(NULL){}
};
struct TREE//树
{
	node* root;
	TREE():root(NULL){}
};
node* minimum(node* x)//一直往左遍历到最底即可
{
	while(x->lef
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raise

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值