给定一个 n 叉树的根节点 root ,返回 其节点值的 后序遍历 。
n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。
示例 1:
输入:root = [1,null,3,2,4,null,5,6]
输出:[1,3,5,6,2,4]
示例 2:
输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:[1,2,3,6,7,11,14,4,8,12,5,9,13,10]
二叉树的后序遍历
/**
* 二叉树的后序遍历
*
* @param root
* @return
*/
public List<Integer> postorder(TreeNode root) {
ArrayList<Integer> result = new ArrayList<>();
postOrder(root, result);
return result;
}
/**
* 深度优先-递归后序遍历:先左子树,然后右子树,最后根节点,
* @param node
*/
public void postOrder(TreeNode node, ArrayList<Integer> result) {
if (node == null) {
return;
}
// 继续遍历左子树
postOrder(node.left, result);
// 继续遍历右子树
postOrder(node.right, result);
// 根节点
result.add(node.val);
}
那么 N 叉树的后序遍历也是类似的
/**
* N叉树的后序遍历
*
* @param root
* @return
*/
public List<Integer> postorder(Node root) {
ArrayList<Integer> result = new ArrayList<>();
postOrder(root, result);
return result;
}
/**
* 深度优先-递归后序遍历:先左子树,然后右子树,最后根节点,
* @param node
*/
public void postOrder(Node node, ArrayList<Integer> result) {
if (node == null) {
return;
}
// 继续所有子树
for (Node child : node.children) {
postOrder(child, result);
}
// 根节点
result.add(node.val);
}