标签:个数 mic 双向 problem ref pre href 解析 png
package com.walegarrett.offer;
/**
* @Author WaleGarrett
* @Date 2021/2/3 23:11
*/
/**
* 题目解析:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
* 分析:注意题目中的二叉树是一颗搜索二叉树。
*
*/
public class Offer_36 {
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;
}
};
Node pre,head;
public Node treeToDoublyList(Node root) {
if(root == null)
return null;
dfs(root);
//修改头尾结点的指针
head.left = pre;
pre.right = head;
return head;
}
void dfs(Node now){
if(now == null)
return;
dfs(now.left);
//待左子树遍历结束后,pre表示仅次于now值的结点
if(pre == null)
head = now;//当前结点为头结点
else pre.right = now;//修改后置指针
//修改前置指针
now.left = pre;
pre = now;
dfs(now.right);
}
}
剑指 Offer 36. 二叉搜索树与双向链表 + 中序遍历 + 二叉排序树
标签:个数 mic 双向 problem ref pre href 解析 png
原文地址:https://www.cnblogs.com/GarrettWale/p/14375468.html