翻转二叉树
226. 翻转二叉树
给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
示例 1:
输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]
示例 2:
输入:root = [2,1,3] 输出:[2,3,1]
示例 3:
输入:root = [] 输出:[]
方法一。深度优先遍历(前序遍历)
class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root==NULL) return(root);stack<TreeNode*>st;st.push(root);while(!st.empty()){TreeNode*node=st.top();st.pop();swap(node->left,node->right);if(node->right) st.push(node->right);if(node->left) st.push(node->left);}return root;}
};
class Solution {
public:TreeNode* invertTree(TreeNode* root) {stack<TreeNode*>st; if(root!=NULL)st.push(root);while(!st.empty()){TreeNode*node=st.top();if(node!=NULL){st.pop();if(node->right) st.push(node->right);if(node->left) st.push(node->left);st.push(node);st.push(NULL);}else{st.pop();node=st.top();st.pop();swap(node->left,node->right);}}return root;}
};
方法二:广度优先遍历(层序遍历)
class Solution {
public:TreeNode* invertTree(TreeNode* root) {queue<TreeNode*>que; if(root!=NULL)que.push(root);while(!que.empty()){int size=que.size();for(int i=0;i<size;i++){TreeNode*node=que.front();que.pop();swap(node->left,node->right);if(node->right) que.push(node->right);if(node->left) que.push(node->left);}}return root;}
};
栈是先入后出的。队列可以保存原有顺序。