思路:
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));
}
}