刷题226. Invert Binary Tree

一、题目说明

题目226. Invert Binary Tree,翻转一个二叉树。难度是Easy!

二、我的解答

这个题目,和二叉树的遍历类似。用递归方法(前、中、后序遍历,按层遍历都可以):

class Solution{
	public:
		TreeNode* invertTree(TreeNode* root){
			if(root ==NULL) return root;
			TreeNode * p = root->left;
			root->left = root->right;
			root->right = p;
			root->left = invertTree(root->left);
			root->right = invertTree(root->right);
			return root;
		}
};

性能如下:

Runtime: 4 ms, faster than 65.13% of C++ online submissions for Invert Binary Tree.
Memory Usage: 10 MB, less than 5.45% of C++ online submissions for Invert Binary Tree.

三、优化措施

非递归的算法,下面用广度优先遍历实现:

class Solution{
	public:
		//non-recursive using level
		TreeNode* invertTree(TreeNode* root){
			if(root == NULL) return root;
			queue<TreeNode*> q;
			TreeNode* tmp,*cur;
			q.push(root);
			while(! q.empty()){
				cur = q.front();
				q.pop();
				tmp = cur->left;
				cur->left = cur->right;
				cur->right = tmp;
				if(cur->left !=NULL ){
					q.push(cur->left);
				}
				if(cur->right != NULL){
					q.push(cur->right);
				}
			}
			
			return root;
		}
};

性能如下:

Runtime: 0 ms, faster than 100.00% of C++ online submissions for Invert Binary Tree.
Memory Usage: 10.2 MB, less than 5.45% of C++ online submissions for Invert Binary Tree.

猜你喜欢

转载自www.cnblogs.com/siweihz/p/12287374.html