• LeetCode赛题----Find Left Most Element


    问题描述

    Given a binary tree, find the left most element in the last row of the tree.

    Example 1:
    Input:
    
    	 2
    	/ 
       1   3
    
    Output:
    1
    
    Example 2:
    Input:
    
        1
       / 
      2   3
     /   / 
    4   5   6
       /
      7
    
    Output:
    7
    

    Note: You may assume the tree is not NULL.

    算法分析

    逐层遍历二叉树是很经典的算法,常规的逐层遍历二叉树是使用一个队列,每次从队列中取出一个节点,将节点的左右子节点加入队列尾部。但这种算法无法对二叉树的各个层进行区分。所以这里需要有两个队列,以此区分各个层。

    Java算法实现:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public int findLeftMostNode(TreeNode root) {
           TreeNode leftMost=root;
            Queue<TreeNode>que1=new LinkedList<>();
            Queue<TreeNode>que2=new LinkedList<>();
            que1.add(root);
            while(!que1.isEmpty()||!que2.isEmpty()){
            	if(!que1.isEmpty()){
            		boolean isFirst=true;//用来标记是否是下一层的第一个节点
            		while(!que1.isEmpty()){	//当一层遍历完了,再遍历下一层。
            			TreeNode node=que1.poll();
            			if(node.left!=null){
            				if(isFirst){
            					isFirst=false;
            					leftMost=node.left;
            				}
            				que2.add(node.left);
            			}
            			if(node.right!=null){
            				if(isFirst){
            					isFirst=false;
            					leftMost=node.right;
            				}
            				que2.add(node.right);
            			}
            		}
            	}
            	else if(!que2.isEmpty()){
            		boolean isFirst=true;
            		while(!que2.isEmpty()){
            			TreeNode node=que2.poll();
                		if(node.left!=null){
                			if(isFirst){
                				isFirst=false;
                				leftMost=node.left;
                			}
                			que1.add(node.left);
                		}
                		if(node.right!=null){
                			if(isFirst){
            					isFirst=false;
            					leftMost=node.right;
            				}
                			que1.add(node.right);
                		}
            		}
            		
            	}
            }
            return leftMost.val;
        }
    }
  • 相关阅读:
    Mina入门demo
    MySQL数据库插入中文时出现Incorrect string value: 'xE6x97xB7xE5x85xA8' for column 'sz_name' at row 1
    synchronized和volatile
    springboot+Zookeeper+Dubbo入门
    zookeeper的安装
    windows下dubbo-admin的安装
    Java 枚举类
    Mysql 解压版 安装时候的注意事项
    Java——JDBC鶸笔记
    《初识Java微信公众号开发》 学习中遇到的困难
  • 原文地址:https://www.cnblogs.com/dongling/p/6391114.html
Copyright © 2020-2023  润新知