力扣--劍指offer--27二叉樹映象(非遞迴和遞迴)
阿新 • • 發佈:2021-01-23
請完成一個函式,輸入一個二叉樹,該函式輸出它的映象。
(ps:也不知道咋整的,貼過來的文字就老偏,所以就自己畫了一個,嘻嘻)
例如輸入:
映象輸出:
因為才學過二叉樹的各種遍歷嘛,而且我這個腦子本來也不太能想到遞迴,所以我一開始看到這個題,輸入是二叉樹的層序遍歷,然後輸出就是將層序遍歷的每個結點的左右結點的位置改變的一下,那我們是否可以通過將元素放入到佇列以後,彈出隊首的時候交換一下左右結點來解決這個問題呢?
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if (root == NULL) return root;
queue<TreeNode*> s;
s.push(root);
while(!s.empty())
{
TreeNode*p = s.front();
s.pop();
if(p->left != NULL){
s.push(p->left);
}
if (p->right != NULL){
s.push(p->right);
}
TreeNode*temp = p->right;
p->right = p->left;
p->left = temp;
}
return root;
}
};
輸入:root = [4,2,7,1,3,6,9]
輸出:[4,7,2,9,6,3,1]
然後就又去看了一下題解,發現大家很多用遞迴做的!wow!可以,一看就明白啦!
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if (root == NULL) {
return NULL;
}
TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
if (root->left != NULL) {
root->left = mirrorTree(root->left);
}
if (root->right != NULL) {
root->right = mirrorTree(root->right);
}
return root;
}
};