下面代码构建的树一定是完全二叉树:
struct TreeNode {
int value;
TreeNode* left;
TreeNode* right;
};
TreeNode* buildCompleteBinaryTree() {
TreeNode* root = new TreeNode{1};
root->left = new TreeNode{2};
root->right = new TreeNode{3};
root->left->left = new TreeNode{4};
root->left->right = new TreeNode{5};
root->right->left = new TreeNode{6};
return root;
}仔细审题,明确已知条件和所求目标,运用相关知识点逐项分析。
审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。
【考点】完全二叉树|层序遍历|二叉树构建
GESP 六级《数据结构与算法》模块必考概念辨析题。命题人专挑学生容易混淆的"完全二叉树"和"满二叉树"下刀——六级前两章刚学完遍历,第三章树结构里这类概念题就是用来筛掉只背定义没真懂的学生。
观察:代码里每条 new 对应一个节点,按顺序是根(1)→左(2)→右(3)→左左(4)→左右(5)→右左(6)。
验证:这个顺序正是层序遍历生成的节点序列。7 个节点按层序填入一棵二叉树,必然形成完全二叉树——这是完全二叉树的定义等价形式。
一般解法:判断任意二叉树是否完全,只需看层序遍历结果里,除最后几个节点外,是否所有节点都有左右孩子,且缺失的孩子只可能出现在末尾。