The depth of the binary tree (recursive and non-recursive)

There are two implementation methods. The
first one uses recursion to traverse, taking the maximum depth of the left and right subtrees plus one.

The second implementation method uses a queue for breadth-first traversal. Add one to the depth every time you traverse one layer


// 树的节点
public class TreeNode {
    
    
    int mValue;
    TreeNode mLeftNode;
    TreeNode mRightNode;
    public TreeNode(int val) {
    
    
        mValue = val;
    }
}
import java.util.LinkedList;
import java.util.Queue;

public class 二叉树的深度 {
    
    
// 使用递归进行遍历
    private static int treeDepthRecursion(TreeNode root) {
    
    
        if (root == null) {
    
    
            return 0; //当没有子节点的时候返回0
        }
        int leftValue = treeDepthRecursion(root.mLeftNode);
        int rightValue = treeDepthRecursion(root.mRightNode);
        // 取左右子树的最大深度,然后加1
        return Math.max(leftValue, rightValue) + 1;
    }

// 非递归进行遍历
   // offer add,remove poll,element peek的区别  [https://www.cnblogs.com/chengdabelief/p/6883238.html](https://www.cnblogs.com/chengdabelief/p/6883238.html)
    private static int treeDepthNoRecurssion(TreeNode root) {
    
    
        if (root == null) {
    
    
            return 0;
        }
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(root); // 往队列中添加元素
        int depth = 0;
        while (queue.size() != 0) {
    
    
            int len = queue.size();
            depth++;
            // 使用层次遍历的方法,遍历每一层的节点
            while (len != 0) {
    
    
                TreeNode node = queue.poll(); // 返回第一个元素并在队列中删除
                if (node.mLeftNode != null) queue.offer(node.mLeftNode);
                if (node.mRightNode != null) queue.offer(node.mRightNode);
                len--;
            }
        }
        return depth;
    }

    public static void main(String[] args) {
    
    
        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);
        TreeNode node7 = new TreeNode(7);
        root.mLeftNode = node2;
        root.mRightNode = node3;
        node2.mLeftNode = node4;
        node2.mRightNode = node5;
        node3.mRightNode = node6;
        node5.mLeftNode = node7;
        System.out.println(treeDepthRecursion(root));
        System.out.println(treeDepthNoRecurssion(root));
    }
}```

Guess you like

Origin blog.csdn.net/liu_12345_liu/article/details/103228009