题目描述:
/ \
2 7
/ \ / \
1 3 6 9
to
4
/ \
7 2
/ \ / \
9 6 3 1
Trivia:
This problem was inspired by this original tweet by Max Howell:
Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.
Hide Tags Tree
分析:
反转左右子树,只需对每个节点进行处理即可,交换来那个子节点。
Invert a binary tree.
/ \
2 7
/ \ / \
1 3 6 9
to
4
/ \
7 2
/ \ / \
9 6 3 1
Trivia:
This problem was inspired by this original tweet by Max Howell:
Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.
Hide Tags Tree
分析:
反转左右子树,只需对每个节点进行处理即可,交换来那个子节点。
可以借助二叉树的深度优先遍历。不多说,代码很简单:
/**/0ms*/
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(root == NULL)
return NULL;
stack<TreeNode* >s;
TreeNode *cur = root;
s.push(root);
while(!s.empty())
{
cur = s.top();
s.pop();
if(cur->left != NULL || cur->right != NULL){ //若左右孩子不全为空,那么交换之
TreeNode *tmp = cur->left;
cur->left = cur->right;
cur->right = tmp;
}
if(cur->right != NULL) //将交换后的非空子节点压榨,下次处理
s.push(cur->right);
if(cur->left != NULL)
s.push(cur->left);
}
return root;
}
};