zoukankan      html  css  js  c++  java
  • 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; }
  • 相关阅读:
    Razor强类型视图下的文件上传
    Js Date对象
    Js用正则表达式验证字符串
    PLC软件: KW multiprog 和 codesys
    S7 200 下载程序块报错 "A compile error occurred , check non-fatal errors for more information " 大端模式
    WebOP Designer (在电脑上在线仿真)与 西门子 S7-200 PPI 通讯
    企业做iISO9001质量管理体系认证的步骤(通俗描述)
    .net framework 装不上的原因
    iso9001质量管理体系认证需要准备的材料&具体流程
    EPLAN 部件库中一个被容易遗漏的功能——“新变量”
  • 原文地址:https://www.cnblogs.com/du001011/p/14515068.html
Copyright © 2011-2022 走看看