二叉搜索树转为双向链表(双向链表节点的魂虚为中序遍历顺序模式)

mac2025-04-01  6

1.把整体问题划分为局部问题,依据中序遍历模式,让每个节点的left指针为prev指针,right指针为next指针。 2.根据推理规律,每个树的根节点的left(prev)为其左孩子的最右节点,right(next)为其右孩子的最左节点。 3.根据规律写出递归代码如下:

public static void binaryTreeToLinkedList(Node root) { if (root == null) return; binaryTreeToLinkedList(root.left); binaryTreeToLinkedList(root.right); if (root.left != null) { Node lchildRighterNode = findRighterNode(root.left); // 左孩子的最右节点 lchildRighterNode.right = root; root.left = lchildRighterNode; } if (root.right != null) { Node rchildLefterNode = findLefterNode(root.right); // 右孩子的最左节点 root.right = rchildLefterNode; rchildLefterNode.left = root; } } static Node findRighterNode(Node node) { while (node.right != null) { node = node.right; } return node; } static Node findLefterNode(Node node) { while (node.left != null) { node = node.left; } return node; }
最新回复(0)