来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binode-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点)。实现一个方法,把二叉搜索树转换为单向链表,要求依然符合二叉搜索树的性质,转换操作应是原址的,也就是在原始的二叉搜索树上直接修改。 返回转换后的单向链表的头节点。 注意:本题相对原题稍作改动

解答

把二叉搜索树转换为单向链表:

  1. 单向链表是从小到大的,左子节点都为 null
  2. 二叉搜索树返回有序数组,需要使用中序遍历
  3. 并且是完全二叉搜索树,可能左节点没有,但是右子节点有

解题思路:

  1. 可以先把中序遍历的框架写好
  2. 中间部分主要是节点赋值 ```

/**

  • 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) {

    1. if (!node) return null;
    2. traverse(node.left);
    3. if (!node.left) {
    4. if (headNode === null) {
    5. headNode = node;
    6. }
    7. if (prevNode === null) {
    8. prevNode = headNode;
    9. } else {
    10. if (prevNode) {
    11. node.left = null;
    12. prevNode.right = node;
    13. prevNode = prevNode.right;
    14. }
    15. }
    16. } else {
    17. if (prevNode) {
    18. node.left = null;
    19. prevNode.right = node;
    20. prevNode = prevNode.right;
    21. }
    22. }
  1. traverse(node.right);
  2. }
  3. traverse(root);
  4. return headNode;

}; ```