翻轉二叉樹(遞歸和迭代)

翻轉二叉樹(遞歸和迭代在這裏插入圖片描述

在這裏插入圖片描述
遞歸,先序遍歷

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 root;
		}

		TreeNode * tmp = root->left;
		root->left = root->right;
		root->right = tmp;

		invertTree(root->left);
		invertTree(root->right);

		return root;
	}
};

迭代 層序遍歷

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 root;
		}

		queue<TreeNode*> queue;
		queue.push(root);

		while (!queue.empty())
		{
			TreeNode * node = queue.front();
			queue.pop();

			TreeNode * tmp = node->left;
			node->left = node->right;
			node->right = tmp;

			if (node->left != NULL)
			{
				queue.push(node->left);
			}
			if (node->right != NULL)
			{
				queue.push(node->right);
			}

		}

		return root;
	}
};

有問題可以留言或者私信我喲,一起編程(禿頭)加油,奧裏給

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章