来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binode-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点)。实现一个方法,把二叉搜索树转换为单向链表,要求依然符合二叉搜索树的性质,转换操作应是原址的,也就是在原始的二叉搜索树上直接修改。 返回转换后的单向链表的头节点。 注意:本题相对原题稍作改动
解答
把二叉搜索树转换为单向链表:
- 单向链表是从小到大的,左子节点都为 null
- 二叉搜索树返回有序数组,需要使用中序遍历
- 并且是完全二叉搜索树,可能左节点没有,但是右子节点有
解题思路:
- 可以先把中序遍历的框架写好
- 中间部分主要是节点赋值 ```
/**
- Definition for a binary tree node.
- function TreeNode(val) {
- this.val = val;
- this.left = this.right = null;
- } / /*
- @param {TreeNode} root
@return {TreeNode} */ var convertBiNode = function(root) { let headNode = null, prevNode = null; function traverse (node) {
if (!node) return null;traverse(node.left);if (!node.left) {if (headNode === null) {headNode = node;}if (prevNode === null) {prevNode = headNode;} else {if (prevNode) {node.left = null;prevNode.right = node;prevNode = prevNode.right;}}} else {if (prevNode) {node.left = null;prevNode.right = node;prevNode = prevNode.right;}}
traverse(node.right);}traverse(root);return headNode;
}; ```
