本文共 801 字,大约阅读时间需要 2 分钟。
镜像二叉树:根节点的左右孩子交换
所有节点的左右孩子都交换 例如:递推公式:根节点的左子树和右子树换位置
终止条件:空树void MirrorTree(BNode *root) { if (root == NULL) { return; } BNode *tmp = root->left; root->left = root->right; root->right = tmp; MirrorTree(root->left); MirrorTree(root->right); }
如果用非递归,就要用到循环和栈,先进后出。
第一步:先将根节点压栈 第二步:保存栈顶元素并出栈 第三步:将栈顶元素的左右孩子换位置 第四步:判断左右孩子是否为空,如果不是空,压栈 注:一定要记得出栈,要不然就会变成死循环void MirrorTree2(BNode *root) { if (root == NULL) { return; } Stack stack; StackInit(&stack); StackPush(&stack, root); while (!StackEmpty(&stack)) { BNode *node = StackTop(&stack); StackPop(&stack); BNode *tmp = node->left; node->left = node->right; node->right = tmp; if (node->left) { StackPush(&stack, node->left); } if (node->right) { StackPush(&stack, node->right); } } }