二叉树经典题之线索二叉树(中序)

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树经典题之线索二叉树(中序)相关的知识,希望对你有一定的参考价值。

前言:

二叉树刷题是有固定思维的,请移步

README】二叉树刷题框架

线索二叉树

题目

点击跳转:牛客

在这里插入图片描述

思路

此题本质就是二叉树的线索化,所谓二叉树的线索化就是不借用栈通过指针的指向来完成二叉树的非递归遍历
在这里插入图片描述
所以此题中要求的双向链表本质就是指针的链接,而且它要求的是排好序的双向链表,而我们知道二叉搜索树的中序遍历就是顺序的,所以可以进行中序线索化

过程也非常简单,只需要创建一个前驱指针prev,再每次进行递归之前,把当前结点rootleft指向prev,同时把prev(不空)的right指向root

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    void Link(TreeNode* root,TreeNode*& prev)
    {
        if(root==NULL)
            return;
        
        Link(root->left,prev);
        root->left=prev;
        if(prev)
            prev->right=root;
        
        prev=root;
            
        Link(root->right,prev);
    }
    
    TreeNode* Convert(TreeNode* pRootOfTree) 
    {
        if(pRootOfTree==NULL)
            return NULL;
        TreeNode* prev=NULL;
        Link(pRootOfTree,prev);
        TreeNode* head=pRootOfTree;
        while(head->left)
            head=head->left;
        
        return head;
        
        
        
    }
};

在这里插入图片描述

以上是关于二叉树经典题之线索二叉树(中序)的主要内容,如果未能解决你的问题,请参考以下文章

二叉树经典题之二叉树的非递归遍历

算法系列之线索化二叉树,前序线索化中序线索化后序线索化以及遍历~

java实现线索化二叉树的前序中序后续的遍历(完整代码)

数据结构 | 线索二叉树2 | 中序线索二叉树的构造(计算机408统考)

数据结构-树线索二叉树

王道数据结构与算法树(八——2)