二叉树经典题之线索二叉树(中序)
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树经典题之线索二叉树(中序)相关的知识,希望对你有一定的参考价值。
前言:
二叉树刷题是有固定思维的,请移步
线索二叉树
题目
点击跳转:牛客
思路
此题本质就是二叉树的线索化,所谓二叉树的线索化就是不借用栈通过指针的指向来完成二叉树的非递归遍历
所以此题中要求的双向链表本质就是指针的链接,而且它要求的是排好序的双向链表,而我们知道二叉搜索树的中序遍历就是顺序的,所以可以进行中序线索化
过程也非常简单,只需要创建一个前驱指针prev
,再每次进行递归之前,把当前结点root
的left
指向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;
}
};
以上是关于二叉树经典题之线索二叉树(中序)的主要内容,如果未能解决你的问题,请参考以下文章
算法系列之线索化二叉树,前序线索化中序线索化后序线索化以及遍历~