N叉树的操作

原创 2018年04月17日 20:11:48

父节点有且最多只有两个子节点的树称为二叉树,N叉树则是父节点有N个子节点。
由于N叉树有多个子节点,因此没有中序遍历,只剩下前序遍历、后序遍历和层序遍历。


前序遍历

和二叉树类似,遍历的顺序是
根节点-左子节点-其他子节点-右子节点

前序遍历的结果:[1,3,5,6,2,4]

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

        return list;
    }

后序遍历

子节点放前根结点放后,上图
后序遍历的结果:[5,6,3,2,4,1]

    public List<Integer> postorder(Node root) {
        ArrayList<Integer> list=new ArrayList<Integer>();
        if(root==null){
            return list;
        }

        for(int i=0;i<root.children.size();i++){
            list.addAll(postorder(root.children.get(i)));
        }
        list.add(root.val);

        return list;
    }

层序遍历

层序遍历的结果:
[
[1],
[3,2,4],
[5,6]
]

    public List<List<Integer>> levelOrder(Node root) {
        ArrayList<Integer> levelList=new ArrayList<Integer>();
        ArrayList<List<Integer>> list=new ArrayList<List<Integer>>();

        LinkedList<Node> stack=new LinkedList<Node>();
        stack.offer(root);
        while(!stack.isEmpty()){
            int size=stack.size();
            for(int i=0;i<size;i++){
                Node node=stack.poll();
                if(node==null)continue;
                for(int j=0;j<node.children.size();j++){
                    stack.offer(node.children.get(j));
                }
                levelList.add(node.val);
            }
            if(levelList.size()>0)
            list.add(levelList);
            levelList=new ArrayList<Integer>();
        }
        return list;
    }

N叉树的深度

    public int maxDepth(Node root) {
        if(root==null){
            return 0;
        }
        int max=0;
        for(int i=0;i<root.children.size();i++){
            int temp=maxDepth(root.children.get(i));
            if(temp>max){
                max=temp;
            }
        }
        return max+1;
    }

由于N叉树没有什么特别的性质,所以常见的操作不是很多,全部的代码在GitHub,所采用的序列化为Json。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/s1991721/article/details/79980029

N叉树的具体实现 (非递归)

  • 2011年05月28日 14:25
  • 4KB
  • 下载

求具有n个结点的m叉树的最小高度

这是《王道数据结构联考复习指导》P98,4.1.3 树的性质的第四条。 1、问题重述:具有m个结点的m叉树的最小高度是? 2、解题思路,只有当这n个结点建立的m叉树为满的时候,树的高度才会最低。 层次...
  • a1456123a
  • a1456123a
  • 2015-10-04 21:27:36
  • 2109

N叉树一 基本实现

丢了一次以前写的算法的文档和源代码,Ubuntu One不可靠啊!只好从头再写一遍。本文实现了一个树,不是二叉树,是N叉树。也就是允许一个节点拥有多个子节点。不是为了做题目糊弄人,所以内存管理不允许泄...
  • sheismylife
  • sheismylife
  • 2012-06-03 20:16:49
  • 4392

一棵N叉树类

  • 2008年07月08日 04:13
  • 3KB
  • 下载

多叉树结构实现搜索算法

package com.mvbox.utility; import java.util.ArrayList; import java.util.List; /** * * @author 0...
  • zishan007
  • zishan007
  • 2015-04-08 14:25:30
  • 396

m叉树的叶子节点数量

一个m叉树,度数为1的节点数为N1,度数为2的节点数为N2,度数为m的节点数为Nm, 求叶子节点的数量 节点总数为 N1 + 2*N2 + 3*N3 + ... +m*Nm +1 则叶子节...
  • sunmenggmail
  • sunmenggmail
  • 2012-11-27 09:39:52
  • 1747

数据结构与算法(C#实现) N叉树

Heavenkiller(原创) public override uint Degree { get { ...
  • eee365
  • eee365
  • 2009-09-06 22:39:00
  • 178

二叉树的c#实现 包括添加删除

  • 2012年11月22日 21:47
  • 41KB
  • 下载

一个简单的多叉树C++实现

一个简单的多叉树实现:利用迭代器方便地构建树,可以递归输出,前序,后序。利用栈实现输出。销毁树只能后序遍历类的定义:#include #include #include #include #inclu...
  • dizuo
  • dizuo
  • 2009-03-08 12:12:00
  • 17445

图的m着色问题(回溯法-满m叉树)

1.问题描述: 给定无向连通图G和m种不同的颜色。用这些颜色为图G的所有顶点着色,每个顶点着一种颜色。每条边的2个顶点颜色不同。称为图的m着色。 求有多少种方法为图可m着色。 示例: 该无向连...
  • Limbos
  • Limbos
  • 2015-12-26 20:24:26
  • 750
收藏助手
不良信息举报
您举报文章:N叉树的操作
举报原因:
原因补充:

(最多只允许输入30个字)