算法 力扣897 - 递增顺序搜索树

这里写目录标题

要求

给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。

示例 1:
在这里插入图片描述

输入:root = [5,3,6,2,4,null,8,1,null,null,null,7,9]
输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]
示例 2:

在这里插入图片描述

输入:root = [5,1,7]
输出:[1,null,5,null,7]

提示:

树中节点数的取值范围是 [1, 100]
0 <= Node.val <= 1000

代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication9
{
    class Program
    {
        public class TreeNode
        {
            public int val;
            public TreeNode left;
            public TreeNode right;
            public TreeNode(int val = 0, TreeNode left = null, TreeNode right = null)
            {
                this.val = val;
                this.left = left;
                this.right = right;
            }
        }
        public class Solution
        {
            private TreeNode resNode;
            public TreeNode IncreasingBST(TreeNode root)
            {
                TreeNode dummyNode = new TreeNode(-1);
                resNode = dummyNode;
                inorder(root);
                return dummyNode.right;

            }
            public void inorder(TreeNode node)
            {
                if (node == null)
                {
                    return;
                }
                inorder(node.left);

                // 在中序遍历的过程中修改节点指向
                resNode.right = node;
                node.left = null;
                resNode = node;

                inorder(node.right);
            }
        }
        static void Main(string[] args)
        {
            Solution sl = new Solution();
            TreeNode a1 = new TreeNode(1);
            TreeNode a7 = new TreeNode(7);
            TreeNode a5 = new TreeNode(5,a1,a7);
            TreeNode re = sl.IncreasingBST(a5);
            Console.WriteLine(re.val + " " + re.right.val + " " + re.right.right.val);
            Console.ReadKey();
        }
    }
}

思路

  1. 因为只有右孩子,所以 node.left = null
  2. 考虑递归,先左查找,当左边为null的时候return 回到上一个,把上一个的复制到结果链表的右孩子中,然后指向这个节点 然后回到上一层,然后再右查找 正好符合中序遍历的左中右的风格
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值