0
点赞
收藏
分享

微信扫一扫

LeetCode226.翻转二叉树

东林梁 2022-02-14 阅读 58

LeetCode226.翻转二叉树

文章目录

1.问题

在这里插入图片描述

2.思路

整体思路是翻转每一个结点的左右孩子,所以需要遍历二叉树。则重点是以何种方式遍历二叉树!

下以前序为例:
在这里插入图片描述

3.代码实现

(1)递归

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
    //1.终止条件
        if(root==NULL) return NULL;
    //2.交换左右结点
        TreeNode* tmp=root->left;
        root->left=root->right;
        root->right=tmp;
    //3.遍历左右子树
        invertTree(root->left);
        invertTree(root->right);	
        return root; 
    }
};

注意:

错误代码:

(2)迭代

class Solution {
public:
   TreeNode* invertTree(TreeNode* root) {
    stack<TreeNode*>st;
    if(root == NULL) return root;
   	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; //栈为空,结束 
	}
};
举报

相关推荐

0 条评论