当前位置:   article > 正文

二叉树的层次遍历和分层遍历,每层个数,打印每层最左端节点_如何统计tree每层数量c语言

如何统计tree每层数量c语言

初始化二叉树

package com.zhenxing.garypractice.algorithm.structure;

/**
 * 
 ClassName: Tree structure <br/> 
 Function: <br/>
 *
 * @author zhenxing.liu
 * @date 2020/6/20
 */
public class TreeNode {
    TreeNode left;
    TreeNode right;
    int value;

    public TreeNode(int value){
        this.value = value;
    }

    /**
     * init tree  1 2 3 4 null 5 6
     *         1
     *     2      3
     *  4  null 5   6
     * @return
     */
    public static TreeNode initTree(){
        TreeNode root = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(3);
        TreeNode node4 = new TreeNode(4);
        TreeNode node5 = new TreeNode(5);
        TreeNode node6 = new TreeNode(6);

        root.left = node2;
        root.right = node3;
        node2.left = node4;
        node3.left = node5;
        node3.right = node6;
        return root;
    }

    public TreeNode getLeft() {
        return left;
    }

    public void setLeft(TreeNode left) {
        this.left = left;
    }

    public TreeNode getRight() {
        return right;
    }

    public void setRight(TreeNode right) {
        this.right = right;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

层序遍历

 /**
     * 层序遍历
     * @param root
     */
    public static void sequenceTravseral(TreeNode root){
        if(root == null){
            return;
        }
        ArrayDeque<TreeNode> arrayDeque = new ArrayDeque();
        arrayDeque.offer(root);
        while(!arrayDeque.isEmpty()){
            TreeNode node = arrayDeque.poll();
            if(node.getLeft() != null){
                arrayDeque.offer(node.getLeft());
            }
            if(node.getRight() != null){
                arrayDeque.offer(node.getRight());
            }
            System.out.println(node.getValue());
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

分层遍历,每层个数

/**
     * 分层打印,每层有多少个
     */
    public static void layeredPrint(TreeNode root){
        if(root == null){
            return;
        }
        ArrayDeque<TreeNode> deque = new ArrayDeque<>();
        deque.offer(root);
        int level = 0;
        int levelNum = 0;
        while(!deque.isEmpty()){
            levelNum = deque.size();
            level++;
            for(int i = 0; i < levelNum; i++){
                TreeNode node = deque.poll();
                System.out.print(node.getValue() + " ");
                if(node.getLeft() != null){
                    deque.offer(node.getLeft());
                }
                if(node.getRight() != null){
                    deque.offer(node.getRight());
                }
            }
            System.out.print(" level:" + level + " levelNum:" + levelNum + "\n");
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

打印树的最左端节点

public static void layeredPrintLeftest(TreeNode root){
        if(root == null){
            return;
        }
        ArrayDeque<TreeNode> deque = new ArrayDeque<>();
        deque.offer(root);
        int levelNum;
        while(!deque.isEmpty()){
            levelNum = deque.size();
            //取队列头
            System.out.println(deque.peek().getValue());
            for(int i = 0; i < levelNum; i++){
                TreeNode node = deque.poll();
                if(node.getLeft() != null){
                    deque.offer(node.getLeft());
                }
                if(node.getRight() != null){
                    deque.offer(node.getRight());
                }
            }

        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

main 方法

public static void main(String[] args) {
        TreeNode root = TreeNode.initTree();
        //sequenceTravseral(root);
        layeredPrint(root);
        layeredPrintLeftest(root);

    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

运行结果:
在这里插入图片描述

---最左端节点----
1
2
4
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/846549
推荐阅读
相关标签
  

闽ICP备14008679号