美文网首页
LeetCode题解之递增顺序查找树

LeetCode题解之递增顺序查找树

作者: l1fe1 | 来源:发表于2020-09-12 07:36 被阅读0次

    递增顺序查找树

    题目描述

    给你一个树,请你 按中序遍历 重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。

    示例 1:

    输入:[5,3,6,2,4,null,8,1,null,null,null,7,9]
    
           5
          / \
        3    6
       / \    \
      2   4    8
     /        / \ 
    1        7   9
    
    输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]
    
     1
      \
       2
        \
         3
          \
           4
            \
             5
              \
               6
                \
                 7
                  \
                   8
                    \
                     9  
    

    提示:

    1. 给定树中的结点数介于 1 和 100 之间。
    2. 每个结点都有一个从 0 到 1000 范围内的唯一整数值。

    解题思路

    在树上进行中序遍历,然后将树中的节点进行重新连接。具体地,每当我们遍历到一个节点时,把它的左孩子设为空,并将其本身作为上一个遍历到的节点的右孩子。

    复杂度分析

    • 时间复杂度:O(n),其中 n 是树中节点的个数。
    • 空间复杂度:O(h),其中 h 是树的高度。

    代码实现

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        TreeNode cur;
        public TreeNode increasingBST(TreeNode root) {
            TreeNode ans = new TreeNode(-1);
            cur = ans;
            inorder(root);
            return ans.right;
        }
    
        public void inorder(TreeNode node) {
            if (node == null) {
                return;
            }
            inorder(node.left);
            node.left = null;
            cur.right = node;
            cur = node;
            inorder(node.right);
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode题解之递增顺序查找树

          本文链接:https://www.haomeiwen.com/subject/cgnbektx.html