以下代码创建的树是一棵完全二叉树:
TreeNode* root = new TreeNode{1};
root->left = new TreeNode{2};
root->right = new TreeNode{3};
root->left->left = new TreeNode{4};根据二叉树的遍历特性,先/前序遍历确定根节点,中序遍历确定左右子树范围,从而重构整棵树,再输出后序遍历结果。
易混淆三种遍历的顺序。先序:根左右;中序:左根右;后序:左右根。注意遍历结果中相邻节点的关系。
【考点】完全二叉树定义|二叉树层序遍历|树节点构造
考纲定位:本题出自GESP六级《数据结构》模块,核心考察"完全二叉树"判定。命题人专门卡住"二叉树层序遍历"的考点,因为六级大纲明确要求能识别完全二叉树与满二叉树的区别,这是绝大多数考生混淆的盲区。
解题思维:完全二叉树要求除最后一层外,各层节点数达满,且最后一层节点靠左排列。代码构建的树节点数为4,层序编号分别是:根为1,第二层左2右3,第三层左4。按层序编号判断,编号4恰为第三层最左位置,不存在第三层右侧空缺,因此满足完全二叉树定义。
陷阱拆解:错误选项B利用"二叉树左子树优先"的直觉陷阱。学生容易误以为只要有左子树就是完全二叉树,忽略"最后一层靠左"的关键条件;本题代码恰好补齐了左子树,但若无右子树(如仅创建左左左)就会落入陷阱。命题人用"左孩子链"的隐蔽写法,诱导考生凭经验而非定义判断。
反命题思维:若将代码中"root->left->left = new TreeNode{4};"改为"root->right->right = new TreeNode{4};",则第三层最右出现节点而左侧空缺,完全二叉树判定即变为错误。命题人可借此延伸考察"非连续填充"的边界情况,这正是六级区分度所在。