首页 > 其他分享 >线索二叉树

线索二叉树

时间:2024-04-02 09:02:05浏览次数:22  
标签:pre 递归 中序 线索 二叉树 NULL InThread

// 中序遍历对二叉树线索化的递归算法
void InThread(ThreadTree &p, ThreadTree &pre) {
	if (p != NULL) {
    	InThread(p->lchild, 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(p->rchild, pre);	// 递归线索化右子树
    }
}

// 中序遍历建立中序线索二叉树
void CreateInThread(ThreadTree T) {
	ThreadTree pre = NULL;
    if (T != NULL) {
    	pre->rchild = NULL;
    	pre->rtag = 1;
    }
}

算法的思想很简单:算法整体思路与中序遍历一致,按照“左根右”的顺序编排代码。

  • 首先InThread一直递归到最左子树;
  • 其次我们要帮助p节点寻找前驱节点,建立前驱线索;
  • 之后我们要帮助pre节点寻找后继节点,建立后继线索;
  • 最后InThread向右递归;

总结:找到某个状态,完整状态的转变,最后递归解决问题。

标签:pre,递归,中序,线索,二叉树,NULL,InThread
From: https://www.cnblogs.com/moguw/p/18109781

相关文章

  • 2024.2.13力扣每日一题——二叉树的垂序遍历
    2024.2.13题目来源我的题解方法一TreeMap+深度优先遍历方法二官方题解(自定义排序)数组实现欢迎讨论(做题中遇到的一个问题)题目来源力扣每日一题;题序:987我的题解方法一TreeMap+深度优先遍历在递归形式的前、中、后序遍历中任选一种进行遍历,并在遍历过程中记......
  • 2024.2.16力扣每日一题——二叉树的锯齿形层序遍历
    2024.2.16题目来源我的题解方法一双端队列+标志题目来源力扣每日一题;题序:103我的题解方法一双端队列+标志层序遍历利用双端队列和标志,判断当前应该往那个方向遍历注意:在逆向遍历时,加入后续节点到队列中的顺序需要改变时间复杂度:O(N),其中N为二叉树的......
  • 序列化二叉树
    请实现两个函数,分别用来序列化和反序列化二叉树。您需要确保二叉树可以序列化为字符串,并且可以将此字符串反序列化为原始树结构。数据范围树中节点数量 [0,1000]。样例你可以序列化如下的二叉树8/\122/\64为:"[8,12,2,null,null,6,......
  • 【二叉树】Leetcode 437. 路径总和 III【中等】
    路径总和III给定一个二叉树的根节点root,和一个整数targetSum,求该二叉树里节点值之和等于targetSum的路径的数目。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。示例1:**输入:**root=[10,5,-3,3,2,null,11,3,......
  • 2673. 使二叉树所有路径值相等的最小代价
    思路先看3节点的子树,想要路径值相同,只能修改叶子节点的值,如上图只能2去+1操作。核心思想:那么对于任意左右孩子节点,想要从根节点下来的路径相同,只能修改孩子节点。所以我们只需要从下至上记录叶子节点到当前节点的路径值,然后计算当前节点和右节点的差值。详细看灵神树上贪心......
  • [蓝桥杯 2019 省赛 AB] 完全二叉树的权值
    #[蓝桥杯2019省AB]完全二叉树的权值##题目描述给定一棵包含$N$个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是$A_1,A_2,\cdotsA_N$,如下图所示:现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?如果有......
  • 【前端面试3+1】06继承方式及优缺点、缓存策略、url输入到渲染全过程、【二叉树中序遍
    一、继承有哪些方式?以及优缺点        继承的方式包括原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承和组合式继承。1.原型链继承:实现方式:将子类的原型指向父类的实例来实现继承。优点:简单易懂,代码量少。缺点:存在引用类型共享的问题。functionPare......
  • 2024.2.7力扣每日一题——二叉树的堂兄弟节点2
    2024.2.7题目来源我的题解方法一哈希表+层序遍历(自己的想法,硬在每一层去算)方法二广度优先遍历(官方题解,在上一层求下一层)题目来源力扣每日一题;题序:2461我的题解方法一哈希表+层序遍历(自己的想法,硬在每一层去算)使用两个哈希表分别映射parent<子节点,父节点>,c......
  • 2024.2.8力扣每日一题——二叉树的堂兄弟节点
    2024.2.8题目来源我的题解方法一层序遍历方法二深度优先遍历题目来源力扣每日一题;题序:993我的题解方法一层序遍历使用层序遍历,先判断x或y是否是根节点,若是则x和y必然不可能是堂兄弟节点。每次遍历当前层时判断下一层是否出现x和y,若x和y分别出现在该节点的......
  • 【每周例题】力扣 C++ 二叉树的最小深度
    二叉树的最小深度题目二叉树的最小深度题目分析1.首先我们可以处理最小深度为0与最小深度为1的情况:最小深度为0:头结点为空;root==nullptr最小深度为1:root->left==nullptr&&root->right==nullptr2.接下来分为左右子树处理,我们可以用递归来计算最小深度3.最后比较左......