基本的なトラバーサルフレームワーク

アレイ

void traverse(int[] arr) {
    
    
    for (int i = 0; i < arr.length; i++) {
    
    
        // 迭代访问 arr[i]
    }
}

単一のリスト

/* 基本的单链表节点 */
class ListNode {
    
    
    int val;
    ListNode next;
}

void traverse(ListNode head) {
    
    
    for (ListNode p = head; p != null; p = p.next) {
    
    
        // 迭代访问 p.val
    }
}

void traverse(ListNode head) {
    
    
    // 递归访问 head.val
    traverse(head.next)
}

二分木

/* 基本的二叉树节点 */
class TreeNode {
    
    
    int val;
    TreeNode left, right;
}

void traverse(TreeNode root) {
    
    
    traverse(root.left)
    traverse(root.right)
}

N-aryツリー

/* 基本的 N 叉树节点 */
class TreeNode {
    
    
    int val;
    TreeNode[] children;
}

void traverse(TreeNode root) {
    
    
    for (TreeNode child : root.children)
        traverse(child)
}

二分木階層走査

void traverse(TreeNode root) {
    
    
    if (root == null) return;
    // 初始化队列,将 root 加入队列
    Queue<TreeNode> q = new LinkedList<>();
    q.offer(root);

    while (!q.isEmpty()) {
    
    
        TreeNode cur = q.poll();

        /* 层级遍历代码位置 */
        System.out.println(root.val);
        /*****************/

        if (cur.left != null) {
    
    
            q.offer(cur.left);
        }

        if (cur.right != null) {
    
    
            q.offer(cur.right);
        }
    }

おすすめ

転載: blog.csdn.net/qq_41729287/article/details/114014493