• LeetCode226. 翻转二叉树 做题小结


    题目:

    翻转一棵二叉树。
    
    示例:
    
    输入:
    
         4
       /   
      2     7
     /    / 
    1   3 6   9
    输出:
    
         4
       /   
      7     2
     /    / 
    9   6 3   1
    

    递归法:

    其实就是交换一下左右节点,然后再递归的交换左节点,右节点
    根据动画图我们可以总结出递归的两个条件如下:

    终止条件:当前节点为 null 时返回
    交换当前节点的左右节点,再递归的交换当前节点的左节点,递归的交换当前节点的右节点
    时间复杂度:每个元素都必须访问一次,所以是 O(n)
    空间复杂度:最坏的情况下,需要存放 O(h) 个函数调用(h是树的高度),所以是 O(h)

    代码:

    class Solution {
    	public TreeNode invertTree(TreeNode root) {
    		//递归函数的终止条件,节点为空时返回
    		if(root==null) {
    			return null;
    		}
    		//下面三句是将当前节点的左右子树交换
    		TreeNode tmp = root.right;
    		root.right = root.left;
    		root.left = tmp;
    		//递归交换当前节点的 左子树
    		invertTree(root.left);
    		//递归交换当前节点的 右子树
    		invertTree(root.right);
    		//函数返回时就表示当前这个节点,以及它的左右子树
    		//都已经交换完了
    		return root;
    	}
    }
    
    

    迭代法:


    递归实现也就是深度优先遍历的方式,那么对应的就是广度优先遍历。
    广度优先遍历需要额外的数据结构–队列,来存放临时遍历到的元素。
    深度优先遍历的特点是一竿子插到底,不行了再退回来继续;而广度优先遍历的特点是层层扫荡。
    所以,我们需要先将根节点放入到队列中,然后不断的迭代队列中的元素。
    对当前元素调换其左右子树的位置,然后:

    判断其左子树是否为空,不为空就放入队列中
    判断其右子树是否为空,不为空就放入队列中

    代码:

    class Solution {
    	public TreeNode invertTree(TreeNode root) {
    		if(root==null) {
    			return null;
    		}
    		//将二叉树中的节点逐层放入队列中,再迭代处理队列中的元素
    		LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
    		queue.add(root);
    		while(!queue.isEmpty()) {
    			//每次都从队列中拿一个节点,并交换这个节点的左右子树
    			TreeNode tmp = queue.poll();
    			TreeNode left = tmp.left;
    			tmp.left = tmp.right;
    			tmp.right = left;
    			//如果当前节点的左子树不为空,则放入队列等待后续处理
    			if(tmp.left!=null) {
    				queue.add(tmp.left);
    			}
    			//如果当前节点的右子树不为空,则放入队列等待后续处理
    			if(tmp.right!=null) {
    				queue.add(tmp.right);
    			}
    			
    		}
    		//返回处理完的根节点
    		return root;
    	}
    }
    
  • 相关阅读:
    排序
    阿里实习 电面,面试
    外部排序
    error: LNK 2019 无法解析的外部符号
    c++ 变量定义 的初始化规则
    Spring 让 LOB 数据操作变得简单易行
    深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例
    Spring jdbc call oralce procedure or function
    JSON 简单封装
    extjs3 用户管理 页面
  • 原文地址:https://www.cnblogs.com/nmydt/p/14256371.html
Copyright © 2020-2023  润新知