当前位置:网站首页>C#通过线索二叉树进行中序遍历输出
C#通过线索二叉树进行中序遍历输出
2022-06-29 12:05:00 【黄昏和星空】
程序如下所示
建立线索二叉树,或者说对二叉树线索化,实质上就是遍历一棵二叉树。在遍历过程中,访问结点的操作是检查当前的左,右指针域是否为空,将它们改为指向前驱结点或后续结点的线索。为实现这一过程,设指针pre始终指向刚刚访问的结点,即若指针p指向当前结点,则pre指向它的前驱,以便设线索。
另外,在对一颗二叉树加线索时,必须首先申请一个头结点,建立头结点与二叉树的根结点的指向关系,对二叉树线索化后,还需建立最后一个结点与头结点之间的线索。
下面是建立中序二叉树的递归算法,其中pre为全局变量。
///
/// 通过中序遍历对二叉树线索化
///
///
///
static void InThread(ref ThreadNode p, ref ThreadNode pre)
{
if (p != null)
{
InThread(ref p.lchild,ref pre);
if (p.lchild == null) { p.lchild = pre; p.ltag = 1; }
if (pre!=null&&pre.rchild==null) { pre.rchild = p;pre.rtag = 1; }
pre = p;
InThread(ref p.rchild, ref pre);
}
}
///
/// 创建线索二叉树主逻辑
///
///
static void CreateInThread(ref ThreadNode T) {
ThreadNode pre = null;
if (T!=null) {
InThread(ref T,ref pre);
pre.rchild = null;
pre.rtag = 1;
}
}
/// <summary>
/// 寻找中序遍历线索二叉树的第一个节点
/// </summary>
/// <returns></returns>
static ThreadNode FirstNode(ThreadNode T) {
while (T.lchild!=null&&T.ltag==0) { T = T.lchild; }
return T;
}
/// <summary>
/// 寻找中序线索二叉树中节点p再中序序列下的后继节点
/// </summary>
/// <param name="p"></param>
/// <returns></returns>
static ThreadNode Nextnode(ThreadNode p) {
if (p.rtag==0) { return FirstNode(p.rchild); }else {
return p.rchild;
}
}
/// <summary>
/// 通过中序线索二叉树实现中序遍历
/// </summary>
/// <param name="T"></param>
static void Inorder(ThreadNode T) {
for (ThreadNode p=FirstNode(T);p!=null;p=Nextnode(p)) {
Console.WriteLine(p.data);
}
}
}
public class ThreadNode{
public ThreadNode() { }
public int data;//数据元素
public ThreadNode lchild, rchild;//左右孩子结点
public int ltag, rtag;//左右线索标志
}
加粗样式
边栏推荐
- Cereal mall project
- GBase8s数据库INTO STANDARD 和 INTO RAW 子句
- Interpolated scatter data
- Recurrence of recommended models (III): recall models youtubednn and DSSM
- How to install oracle19c in Centos8
- Pangolin编译error: ‘numeric_limits’ is not a member of ‘std’
- Kyligence Zen, an intelligent indicator driven management and decision-making platform, is newly launched and is in limited internal testing
- 东方财富证券开户安全吗 证券开户办理
- Method area of JVM
- 墨菲安全入选中关村科学城24个重点项目签约
猜你喜欢

Comment calculer Win / Tai / Loss in paired t - test

Unexpected ‘debugger‘ statement no-debugger

Introduction to multi project development - business scenario Association basic introduction test payroll

LeetCode_双指针_中等_328.奇偶链表

在印度与软件相关的发明可不可以申请专利?

ERP编制物料清单 基础

Interpolated scatter data

QQ集体被盗号,猝不及防的大型社死名场面

Kyligence Zen, an intelligent indicator driven management and decision-making platform, is newly launched and is in limited internal testing

AGCO AI frontier promotion (6.29)
随机推荐
How to install oracle19c in Centos8
【君正T31】只读rootfs文件系统squashfs的解压和打包
Go learning - build a development environment vscode development environment golang
地球观测卫星数据
Unexpected ‘debugger‘ statement no-debugger
Recommended model recurrence (I): familiar with torch rechub framework and use
【综合案例】信用卡虚拟交易识别
牛顿不等式
Kyligence Zen, an intelligent indicator driven management and decision-making platform, is newly launched and is in limited internal testing
Go高级工程师必修课 | 真心建议你来听听,别错过~
GBase8s数据库select有ORDER BY 子句3
东方财富证券开户安全吗 证券开户办理
推荐模型复现(二):精排模型DeepFM、DIN
GBase8s数据库select有ORDER BY 子句1
ERP编制物料清单 金蝶
【LeetCode】14、最长公共前缀
《Go题库·14》WaitGroup的坑
Codeforces Round #803 (Div. 2)
Pygame 对图像进行翻转
Gbase8s database select has an order by clause