前言
什麼是二叉樹鏡像
其實就是左右子樹對調一下就是二叉樹的鏡像了
比如下面兩圖就是互爲鏡像的二叉樹
遞歸方法
方法分析
採用分置的思想,大事化小事,把交換左右子樹地址的事交給每一個棧幀完成。
完整代碼
//二叉樹的鏡像 遞歸方法
void BTreeMirrorR(BTNode* root)
{
BTNode* tmp;
if (root == NULL)
return;
BTreeMirrorR(root->_left);
BTreeMirrorR(root->_right);
tmp = root->_left;
root->_left = root->_right;
root->_right = tmp;
}
非遞歸方法
方法分析
可以在層序遍歷的基礎上對每一層的結點的左右子樹進行交換
//二叉樹的鏡像 非遞歸方法
void BTreeMirror(BTNode* root)
{
BTNode* top;
BTNode* tmp;
Queue Q;
if (root == NULL)
return;
QueueInit(&Q);
QueuePush(&Q, root);
while (!QueueEmpty(&Q))
{
top = QueueFront(&Q);
if (top->_left != NULL)
QueuePush(&Q,top->_left);
if (top->_right != NULL)
QueuePush(&Q, top->_right);
//交換左右子樹的地址
tmp = top->_left;
top->_left = top->_right;
top->_right = tmp;
QueuePop(&Q);
}
}