Skip to content
本页目录

0366-寻找二叉树的叶子节点

https://leetcode.cn/problems/find-leaves-of-binary-tree

给你一棵二叉树,请按以下要求的顺序收集它的全部节点: 依次从左到右,每次收集并删除所有的叶子节点 重复如上过程直到整棵树为空

示例:

输入: [1,2,3,4,5]
  
          1
         / \
        2   3
       / \     
      4   5    

输出: [[4,5,3],[2],[1]]

解释:

1. 删除叶子节点 [4,5,3] ,得到如下树结构:

          1
         / 
        2          
 

2. 现在删去叶子节点 [2] ,得到如下树结构:

          1          
 

3. 现在删去叶子节点 [1] ,得到空树:

          []         

思路:暴力法

使用 dfs 遍历,每次获取和删除叶子节点

参考代码

csharp
public class Solution {

	private TreeNode dfs(TreeNode root, IList<int> list){
		if(root == null){
			return null;
		}
		if(root.left == null && root.right == null){
			list.Add(root.val);
			return null;
		}
		root.left = dfs(root.left, list);
		root.right = dfs(root.right, list);
		return root;
	}

    public IList<IList<int>> FindLeaves(TreeNode root) {
    	IList<IList<int>> myList = new List<IList<int>>();
    	while(root != null){
    		List<int> list = new List<int>();
    		root = dfs(root,list);
    		myList.Add(list);
    	}
    	return myList;
    }
}

Released under the MIT License.