本文共 1213 字,大约阅读时间需要 4 分钟。
将二叉搜索树转换为循环双向链表
问题描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。目标是通过就地操作完成转换,使树中的节点左指针指向前驱节点,右指针指向后继节点,并返回链表的第一个节点指针。
转换过程:
代码逻辑:
public class lab36midium { 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 cur) { if (cur == null) { return; } dfs(cur.left); if (head == null) { head = cur; } if (pre != null) { pre.right = cur; } cur.left = pre; pre = cur; dfs(cur.right); }}public 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; }} 返回值: 函数treeToDoublyList返回链表的第一个节点指针,即排序后的循环双向链表的头节点。
转载地址:http://bkbq.baihongyu.com/