美文网首页
N叉树的操作

N叉树的操作

作者: s1991721 | 来源:发表于2018-04-17 20:11 被阅读0次

父节点有且最多只有两个子节点的树称为二叉树,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。

相关文章

  • N叉树的操作

    父节点有且最多只有两个子节点的树称为二叉树,N叉树则是父节点有N个子节点。由于N叉树有多个子节点,因此没有中序遍历...

  • 树的遍历

    N叉树的遍历 N叉树的前序遍历 N叉树的后序遍历 N叉树的层序遍历 二叉树 鉴于递归法遍历比较简单,就不重复写了 ...

  • 68_二叉树的比较与相加

    关键词:二叉树的克隆操作、二叉树比较操作、二叉树的相加操作 0. 二叉树的克隆操作 SharedPointer< ...

  • 数据结构重学日记(二十四)线索二叉树

    线索二叉树是不借助栈而借助链表实现的非递归遍历方式。 在之前的操作中,n 个结点的二叉树就有 n + 1 个空指针...

  • [LeetCode] 589. N叉树的前序遍历

    589. N叉树的前序遍历给定一个 N 叉树,返回其节点值的前序遍历。例如,给定一个 3叉树 :3叉树返回其前序遍...

  • 纯C手撕leetcode-基本数据结构-二叉堆

    二叉堆基本操作 使用数组A[1...n],可近视看作一个完全二叉树。 树中每个node 对应数组的一个元素 树的每...

  • 二叉树(binary tree)

    二叉树的定义#### 二叉树是n(n>=0)个具有相同类型的元素的有限集合,当n=0时称为空二叉树,当n>0时,数...

  • 2019-03-11 Day64 待提高

    1.#### 589. N叉树的前序遍历给定一个 N 叉树,返回其节点值的前序遍历。 例如,给定一个 3叉树 : ...

  • 589. N叉树的前序遍历

    给定一个 N 叉树,返回其节点值的前序遍历。N叉树的定义如下 例如 给定一个 3叉树 : 返回其前序遍历: [1,...

  • 590. N叉树的后序遍历

    给定一个 N 叉树,返回其节点值的后序遍历。N叉树的定义如下 例如 给定一个 3叉树 : 返回其后序遍历: [5,...

网友评论

      本文标题:N叉树的操作

      本文链接:https://www.haomeiwen.com/subject/okipkftx.html