leetcode108

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left;
 *     public TreeNode right;
 *     public TreeNode(int x) { val = x; }
 * }
 */
public class Solution
    {
        //private TreeNode Insert(TreeNode T, int x)
        //{
        //    if (T == null)
        //    {
        //        T = new TreeNode(x);
        //        return T;
        //    }
        //    else if (x < T.val)
        //    {
        //        T.left = Insert(T.left, x);
        //    }
        //    else if (x > T.val)
        //    {
        //        T.right = Insert(T.right, x);
        //    }
        //    return T;
        //}


        Queue<TreeNode> Q = new Queue<TreeNode>();

        List<TreeNode> TreeList = new List<TreeNode>();

        void InOrder(TreeNode node)
        {
            if (node != null)
            {
                if (node.left != null)
                {
                    InOrder(node.left);
                }

                //中序处理
                TreeList.Add(node);

                if (node.right != null)
                {
                    InOrder(node.right);
                }
            }
        }

        TreeNode BFS(int count)
        {
            int index = 0;
            TreeNode root = null;
            while (Q.Count > 0 && index < count)
            {
                var n = Q.Dequeue();
                if (n == null)
                {
                    index++;
                    n = new TreeNode(index);
                    root = n;
                    Q.Enqueue(n);
                }
                else
                {
                    if (n.left == null && index < count)
                    {
                        index++;
                        n.left = new TreeNode(index);

                        Q.Enqueue(n.left);
                    }
                    if (n.right == null && index < count)
                    {
                        index++;
                        n.right = new TreeNode(index);
                        Q.Enqueue(n.right);
                    }
                }
            }
            return root;
        }

        public TreeNode SortedArrayToBST(int[] nums)
        {
            var count = nums.Length;
            Q.Enqueue(null);
            var root = BFS(count);

            InOrder(root);

            for (int i = 0; i < TreeList.Count; i++)
            {
                TreeList[i].val = nums[i];
            }

            return root;
        }
    }

 https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/#/description

补充一个python的实现,使用递归处理:

 1 class Solution:
 2     def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
 3         n = len(nums)
 4         if n == 0:#终止条件,返回空
 5             return None
 6         if n == 1:#终止条件,返回单节点
 7             return TreeNode(nums[0])
 8         mid = n // 2
 9         root = TreeNode(nums[mid])#将数组从中间一分为二
10         root.left = self.sortedArrayToBST(nums[:mid])#左子树
11         root.right = self.sortedArrayToBST(nums[mid+1:])#右子树
12         return root#返回
原文地址:https://www.cnblogs.com/asenyang/p/6732570.html