數據結構和算法之二叉樹左視圖

思路:
1、按照層級來遍歷。
2、取每一層的第一個有效節點,如果是右視圖的話就是最後一個有效節點。

import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.zyblue.fastim.common.algorithm.TreeNode;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
 * 樹的左視圖
 * @Author : BlueSky 2019.12.23
 *        4
 *     2     6
 *   1  3  5  7
 * 0            8
 *
 * -----------> 4,2,1,0
 *
 *        4
 *     2     6
 *   1  3  5  7
 *              8
 *
 * -----------> 4,2,1,8
 */
public class LeftViewTree {

    public void foreach(TreeNode treeNode){

        LinkedList<TreeNode> linkedList = new LinkedList<TreeNode>();
        linkedList.add(treeNode);
        List<Integer> res = Lists.newArrayList();
        while (!linkedList.isEmpty()){

            // 獲取這一層所有大小
            int size = linkedList.size();
            System.out.println("size:"+size);

            // 第一個節點就是有效節點
            res.add(linkedList.peekFirst().getVal());

            // 遍歷這一層節點
            for(int i = 0;i<size;i++){
                TreeNode node = linkedList.poll();
                if(node.getLeft() != null){
                    linkedList.add(node.getLeft());
                }
                if(node.getRight() != null){
                    linkedList.add(node.getRight());
                }
            }
        }
		// 結果:res:[4,2,1,8]
        System.out.println("res:"+ JSONObject.toJSONString(res));
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章