[题目链接]
preview -> 题目难度:简单
给一个二叉搜索树, 让你转换成一个双向链表
题解
由于是一个二叉搜索树, 所以中序遍历刚好就是满足顺序的, 要处理的其实就是指针的关系, 先写一个中序遍历, 然后每一个循环中要做的就是,先把前一个节点的后指针指向当前节点, 然后把当前节点的前指针指向前一个节点,在实际操作中, 先写一个中序遍历的函数, 然后加上函数的处理的关系, 然后直接进入主函数, 处理头节点的关系, 头节点就是直接用head存, 然后也是绑定两个指针
源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| class Solution { Node pre; Node head; public Node treeToDoublyList(Node root) { if (root == null) { return head; }
dfs(root); head.left = pre; pre.right = head;
}
void dfs(Node root) { if (root == null) { return; } dfs(root.left); if (pre != null) { pre.right = root; }else { head = root; } root.left = pre; pre = root;
dfs(root.right); } }
|