LeetCode-Tree-116-M: 填充每个节点的下一个右侧节点指针


给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:

struct Node {
  int val;
  Node *left;
  Node *right;
  Node *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。

思路

(1)借用了之前的LeetCode-Tree-102-M:二叉树的层次遍历的两个队列的思想,但是不够优化。
(2)

解法1-两个队列

执行用时 :6 ms, 在所有 Java 提交中击败了5.57%的用户
内存消耗 :38.6 MB, 在所有 Java 提交中击败了44.20%的用户

class Solution {
    Queue<Node> queue1 = new LinkedList<>();
    Queue<Node> queue2 = new LinkedList<>();
    public Node connect(Node root) {
        // 层序遍历
        if(root == null){
            return null;
        }
        Node head = root;

        queue2.offer(root);

        while(!queue1.isEmpty() || !queue2.isEmpty()){
            while(queue1.isEmpty()){
                queue1 = new LinkedList<>(queue2);
                queue2.clear();
            }

            Node curNode=null;
            if(queue1.size()>1){
                curNode = queue1.poll();
                curNode.next = queue1.peek();
            }else{
                curNode = queue1.poll();
                curNode.next = null;
            }

            if(curNode.left != null){
                queue2.add(curNode.left);
            }
            if(curNode.right != null){
                queue2.add(curNode.right);
            }
        }

        return head;
    }
}

解法2-优化 -wait

发布了71 篇原创文章 · 获赞 16 · 访问量 1682

猜你喜欢

转载自blog.csdn.net/Xjheroin/article/details/104063815
今日推荐