本文共 1086 字,大约阅读时间需要 3 分钟。
题目:
解答:
将上一篇中的 将有序数组转化为平衡二叉树改一下,先把链表存成数组。
代码:
class Solution { public: TreeNode *sortedListToBST(ListNode *head) { if (head == NULL) return NULL; vector num; while (head) { num.push_back(head->val); head = head->next; } TreeNode * res = sortedArrayToBST(num); return res; } private: TreeNode *sortedArrayToBST(vector &num) { if (num.size() == 0) return NULL; TreeNode *root = new TreeNode(0); //新建一个节点作为根节点 build(root, 0, num.size() - 1, num); return root; } void build(TreeNode *root, int start, int end, vector &num) { int mid = start + (end - start) / 2; //将中间值作为根节点的值 root->val = num[mid]; if (start <= mid - 1) //如果左边数组不为空 { TreeNode *node = new TreeNode(0); //新建一个节点,为根节点的左子节点,同时作为左子树的根节点传入递归程序 root->left = node; build(root->left, start, mid - 1, num); } if (mid + 1 <= end) //如果右边数组不为空 { TreeNode *node = new TreeNode(0); //新建一个节点,为根节点的右子节点,同时作为右子树的根节点传入递归程序 root->right = node; build(root->right, mid + 1, end, num); } } };
转载地址:http://hytsi.baihongyu.com/