zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    宏中的逗号
    DES算法
    [microsoft]PE和COFF文件格式
    [流媒体]VLC主要模块
    [转][C/C++]函数名字修饰(Decorated Name)方式
    [VS]vs的宏
    [windows操作系统]system32下的那些好东西
    [微软]technet与msdn
    [windows驱动]标准驱动例程
    [windows操作系统]内核性能剖析
  • 原文地址:https://www.cnblogs.com/dongling/p/6391114.html
Copyright © 2011-2022 走看看