• N 叉树的前序遍历


    给定一个 N 叉树,返回其节点值的前序遍历 。

    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]

    对于二叉树遍历问题我们用最简单,最暴力的方法就是递归,如果只是AC的话,递归完全可以,如果面试的话,面试官可能会让你写出非递归遍历,接下来会分别介绍这两种方法,

    递归思路:对于二叉树来说,前序遍历就是先输出根节点,再输出左节点,再输出右节点,根据这个思路我们可以写出对于N叉树的前序遍历方法

    1、先输出根节点

    2、遍历根节点的孩子节点,

    3、重复步骤1

        public List<Integer> preorder(Node root) {
            List<Integer> result = new ArrayList<>();
            if(root == null) return result;
            digui(root,result);
            return result;
        }
    
        public void digui(Node root,List<Integer> result){
            if(root == null) return;
            result.add(root.val);
            List<Node> list = root.children;
            for(int i = 0;i<list.size();i++){
                digui(list.get(i),result);
            }
        }        

    非递归:同样的先想哈二叉树非递归的思路,它需要结合栈来实现,我们都知道栈是先进后出的结构,而前序遍历的顺序是根节点,左孩子,右孩子,那么入栈顺序就是将根节点的左右孩子按右孩子、左孩子的顺序入栈,最后再出栈就是前序遍历的结果。根据这个思路我们可以写出对于N叉树前序遍历的非递归方法

    首先将根节点入栈

    1,判断栈是否为空,不为空就出栈

    2、再将他的孩子节点从右节点到左节点入栈

    3、重复1

        public List<Integer> preorder(Node root) {
            List<Integer> result = new ArrayList<Integer>();
            Stack<Node> stack = new Stack<Node>();
            if(root == null)
                return result;
            stack.push(root);
            while(!stack.isEmpty())
            {
                Node node = stack.pop();
                result.add (node.val);
           //逆序 Collections.reverse(node.children);
    for(Node tmp : node.children) { stack.add(tmp); } } return result; }
  • 相关阅读:
    利用角色简化playbook
    lamp
    playbook部署lamp
    ansible-playbook配置不同系统yum源
    66. 加一
    628. 三个数的最大乘积
    977. 有序数组的平方
    383. 赎金信
    203. 移除链表元素
    83. 删除排序链表中的重复元素
  • 原文地址:https://www.cnblogs.com/du001011/p/14515068.html
Copyright © 2020-2023  润新知