美文网首页
二叉树--链接每个节点的下一个右侧节点Ⅱ

二叉树--链接每个节点的下一个右侧节点Ⅱ

作者: 今年花开正美 | 来源:发表于2020-06-30 22:40 被阅读0次

    今天学习的是上篇算法的升级版:填充每个节点的下一个右侧节点指针Ⅱ。

    题目介绍

    给定任意一个二叉树,填充它的next节点,指向下一个右侧节点,最右侧节点指向null。

    看下图吧:


    二叉树-填充每个节点的下一个右侧节点指针Ⅱ-题目.png

    实现思路

    直接看下图吧:


    二叉树-填充每个节点的下一个右侧节点指针Ⅱ-解题.png

    题目的解题思路和满二叉树的是类似的。

    核心的逻辑是:
    1、右节点不为空时,左节点的next为右节点;右节点为空时,左节点的next为父节点的next节点的左节点。依此类推,直到为null为止。
    2、右节点和左节点是一样的逻辑。

    实现代码

    public class Node {
        public int val;
        public Node left;
        public Node right;
        public Node next;
    
        public Node() {
        }
    
        public Node(int _val) {
            val = _val;
        }
    
        public Node(int _val, Node _left, Node _right, Node _next) {
            val = _val;
            left = _left;
            right = _right;
            next = _next;
        }
    }
    
    public class SolutionConnect2 {
    
        public Node connect(Node root) {
            if (null == root) {
                return null;
            }
    
            if (null != root.left) {
                if (null != root.right) {
                    root.left.next = root.right;
                } else{
                    root.left.next = connectRightNext(root);
                }
                connect(root.left);
            }
    
            if (null != root.right) {
                root.right.next = connectRightNext(root);
                connect(root.right);
            }
            return root;
        }
    
        private Node connectRightNext(Node root){
            Node next = root.next;
            while (null != next) {
                if (null != next.left) {
                    next = root.left;
                    break;
                } else if (null != next.right) {
                    next = next.right;
                    break;
                }
                next = next.next;
            }
            return next;
        }
    
    }
    

    算法相关实现源码地址:https://github.com/xiekq/rubs-algorithms

    相关文章

      网友评论

          本文标题:二叉树--链接每个节点的下一个右侧节点Ⅱ

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