镜面反转怎么编程的呢

时间:2025-03-02 11:05:35 明星趣事

镜面反转通常指的是将二叉树的所有非叶结点的左右孩子对换。下面是一个使用递归方法实现二叉树镜面反转的示例代码:

```c++

include

using namespace std;

// 定义二叉树节点结构体

struct TreeNode {

char data;

TreeNode *leftChild, *rightChild;

TreeNode(char val) : data(val), leftChild(NULL), rightChild(NULL) {}

};

// 递归函数,用于镜像反转二叉树

void mirrorTree(TreeNode* node) {

if (node == NULL) {

return;

}

// 交换左右子节点

TreeNode* temp = node->leftChild;

node->leftChild = node->rightChild;

node->rightChild = temp;

// 递归处理左右子树

mirrorTree(node->leftChild);

mirrorTree(node->rightChild);

}

// 辅助函数,用于前序遍历二叉树并输出节点值

void preOrderTraversal(TreeNode* node) {

if (node == NULL) {

return;

}

cout << node->data << " ";

preOrderTraversal(node->leftChild);

preOrderTraversal(node->rightChild);

}

int main() {

// 创建一个示例二叉树

TreeNode* root = new TreeNode('A');

root->leftChild = new TreeNode('B');

root->rightChild = new TreeNode('C');

root->leftChild->leftChild = new TreeNode('D');

root->leftChild->rightChild = new TreeNode('E');

root->rightChild->leftChild = new TreeNode('F');

root->rightChild->rightChild = new TreeNode('G');

cout << "原始二叉树的前序遍历: ";

preOrderTraversal(root);

cout << endl;

// 镜像反转二叉树

mirrorTree(root);

cout << "镜像反转后的二叉树的前序遍历: ";

preOrderTraversal(root);

cout << endl;

return 0;

}

```

在这个示例中,我们首先定义了一个二叉树节点的结构体`TreeNode`,然后实现了一个递归函数`mirrorTree`来交换每个非叶节点的左右子节点。最后,我们使用前序遍历函数`preOrderTraversal`来输出原始二叉树和镜像反转后的二叉树的前序遍历结果。

请注意,这个示例是针对二叉树的,如果你需要对其他类型的数据结构进行镜面反转,你需要根据具体的数据结构来编写相应的函数。