Leetcode——二叉搜索树与双向链表
Posted Yawn,
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode——二叉搜索树与双向链表相关的知识,希望对你有一定的参考价值。
1. 题目
2. 题解
/*
// Definition for a Node.
class Node {
public int val;
public Node left;
public Node right;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val,Node _left,Node _right) {
val = _val;
left = _left;
right = _right;
}
};
*/
class Solution {
//把每个结点的left看作双向链表里的pre,right看作双向链表里的next,更容易理解
Node head = null;
Node pre = null;
public Node treeToDoublyList(Node root) {
if(root == null){
return null;
}
travel(root);
//中序遍历处理过后只是形成了一个双向链表
//让头结点的pre指向尾结点,尾结点的next指向头,才形成循环
head.left = pre;
pre.right = head;
return head;
}
public void travel(Node root){
if(root == null){
return;
}
travel(root.left);
//如果头结点为空,说明这是双向链表里的第一个结点
//对头结点只需要处理它的next指针,也就是root.left = pre;
if(head == null){
head = root;
} else {
//不为头结点时不仅需要处理它自身的next指针(root.left = pre)
//还需要让链表前一结点的next指向当前节点,也就是pre.right = root;
pre.right = root;
}
//
root.left = pre;
pre = root;
travel(root.right);
}
}
以上是关于Leetcode——二叉搜索树与双向链表的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode]剑指 Offer 36. 二叉搜索树与双向链表
[LeetCode]剑指 Offer 36. 二叉搜索树与双向链表
*Leetcode 426 & 剑指 Offer 36. 二叉搜索树与双向链表