请问 [1, null, 2, 3] 在二叉树测试用例中代表什么
leetcode关于二叉树编程中,测试用例中的数组是如何转换成二叉树的,实际上是通过层次遍历来把数组转换成二叉树。
在 C++中的 vector 数据结构里,只能有一种类型,这里我们用INT_MAX
来代替 null,需要转换的数组中的 null 也请用 INT_MAX 来代替。
我们的转换程序主要是应用在本地,为了方便本地的调试,因此在使用时,尤其要注意数据的范围,若真的用到了 INT_MAX 对应的数据,请把转换程序中代替 null 的INT_MAX
更换为其他数字。
二叉树结构为:
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
代码实现如下:
/**
* 将leetcode中的数组转为二叉树
* 因C++中的vector只能是同一个类型,这里用INT_MAX来代替null
* @param {vector<int>} nums
* @return {TreeNode}
*/
TreeNode *vectorToTree(vector<int> nums) {
int i = 1;
bool isLeftTree = true; // 是否是左分支,true为左分支,false时是右分支
if (nums.size() == 0) {
return nullptr;
}
queue<TreeNode *> myQueue;
TreeNode *head = new TreeNode(nums[0]);
myQueue.push(head);
while (i < nums.size()) {
TreeNode *topNode = myQueue.front();
// 这里我们与js版稍微有点区别
// 队列中的节点只要用两次,当isLeftTree指向到右分支时,说明可以取出了
if (!isLeftTree) {
myQueue.pop();
}
// 我们用INT_MAX来标识nullptr
if (nums[i] != INT_MAX) {
TreeNode *node = new TreeNode(nums[i]);
if (isLeftTree) {
topNode->left = node;
} else {
topNode->right = node;
}
myQueue.push(node);
}
isLeftTree = !isLeftTree;
i++;
}
return head;
}
输入:
vector<int> nums = [1,2,3,4,null,5,6,null,null,7];
二叉树:
参考: