Invert a binary tree.
4 / \ 2 7 / \ / \ 1 3 6 9
to
4 / \ 7 2 / \ / \ 9 6 3 1
这道题我是用递归求解的,代码如下:
代码:(递归)
/** * 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) { TreeNode *cur,*temp; if(root==NULL) return NULL; cur=root; temp=cur->left; cur->left=cur->right; cur->right=temp; cur->left=invertTree(cur->left); cur->right=invertTree(cur->right); return cur; } };
提交中给出的另外一种方法不需要递归,而需要用一个队列存储当前节点。
代码:(queue)
/** * 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) { // base case i) if (root == NULL) return NULL; // use auxiliary data structure, in this case queue chosen std::queue<TreeNode *> q; q.push(root); while (!q.empty()) { // fetch current queue size int size = q.size(); // current level of the binary tree contains at least one node or more while (size > 0) { TreeNode *first = q.front(); // swap OP. // local data O(1) In Place TreeNode *temp = first->left; // remember first->left = first->right; first->right = temp; q.pop(); if (first->left != NULL) q.push(first->left); if (first->right != NULL) q.push(first->right); // one pop, one decrement size = size - 1; } // level by level } return root; } };