void cutLeaves(BinaryNode* &root)
{
//仅含根的树
if (root->left == NULL && root->right == NULL)
{
delete root;
root = NULL;
return;
}
queue<BinaryNode*> q;
q.push(root);
while (!q.empty())
{
BinaryNode *t = q.front();
q.pop();
//t节点向下搜索两个度判断删除
if (t->left && t->left->left == NULL && t->left->right == NULL)
{
delete t->left;
t->left = NULL;
}
if (t->right && t->right->left == NULL && t->right->right == NULL)
{
delete t->right;
t->right = NULL;
}
//删除之后剩余节点加入队列
if (t->left) q.push(t->left);
if (t->right) q.push(t->right);
}
}
用队列层序遍历来删除一棵二叉树的叶子节点。