翻转树的值,看上去很简单。看到树就递归吗?我还是采用了非递归的方式,用一个辅助队列来帮忙。将树的节点一个个塞进去。然后在队列里将节点左右孩子进行交换达到目的。
/** * 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: queue<TreeNode*>tmpQueue; TreeNode *curNode,*tmp; TreeNode* invertTree(TreeNode* root) { if(root) { tmpQueue.push(root); } while(!tmpQueue.empty()) { curNode = tmpQueue.front(); tmpQueue.pop(); tmp = curNode->left; curNode->left = curNode->right; curNode->right = tmp; if(curNode->left) { tmpQueue.push(curNode->left); } if(curNode->right) { tmpQueue.push(curNode->right); } } return root; } };
反思:
1.熟知树的遍历方式有助于解体。
2.递归算法也不能丢啊。