二叉树的线索化

1 简介

深度优先的二叉树遍历方法有先序, 中序和后序. 那么一棵有n个节点的树, 其一共会存储2n个指针, 但是因为只有n - 1条边, 所以只有n - 1个指针会被存储, 剩下的n + 1都会存为nullptr, 那么可以把所有的空指针利用起来. 其中如果某个节点的左子节点为空的话, 可以按照当前遍历方式(先序, 中序, 后序)存储其前驱结点, 右子节点为空的话, 可以存储后继节点.

2 结构

普通的二叉树节点的结构为:

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
};

如果想将二叉树线索化的话, 其空左节点会被赋值为其前驱结点, 空右节点会被赋值为其后继节点, 这样在遍历二叉树的时候, 就不知道其left, right指针到底指向的是其左右子节点还是其前驱后继节点了. 所以需要有一个标志位来判定当前左右子节点指向的是什么. 所以其结构变成了:

struct TreeNode {
    int val;
    TreeNode* left;
    bool leftTag;        //表明现在指向的是左子节点还是前驱结点
    TreeNode* right;
    bool rightTag;       //表明现在指向的是右子节点还是后继节点
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值