📜  leetcode 中带有兄弟指针的二叉树 (1)

📅  最后修改于: 2023-12-03 15:17:18.282000             🧑  作者: Mango

LeetCode中带有兄弟指针的二叉树

LeetCode中带有兄弟指针的二叉树是指每个节点不仅有左右子树指针,还有指向其同级节点的兄弟指针。具体而言,该二叉树是这样一种数据结构:

// Definition for a Node.
class Node {
public:
    int val;
    Node* left;
    Node* right;
    Node* next;

    Node(int _val) {
        val = _val;
        left = NULL;
        right = NULL;
        next = NULL;
    }
};

其中的next就是兄弟指针。

相比于普通的二叉树,带有兄弟指针的二叉树具有如下优点:

  1. 方便进行层次遍历

在普通二叉树中,层次遍历需要用到队列,每次把子节点加入队列中。而在带有兄弟指针的二叉树中,我们可以直接通过节点的兄弟指针进行层次遍历。

  1. 方便进行某些操作

比如:完全二叉树的构建、每一层节点的右侧指向等等可以通过兄弟指针非常方便地完成。

下面是带有兄弟指针的二叉树的具体使用示例:

// 层次遍历示例
void levelOrder(Node* root) {
    if (!root) return;

    Node* p = root;
    while (p) { // 遍历每一层
        Node* q = p; // 当前层的指向节点
        while (q) { // 遍历当前层
            cout << q->val << " ";
            q = q->next;
        }
        cout << endl;
        p = p->left; // 下一层的起始节点
    }
}

除此之外,带有兄弟指针的二叉树还可以用于一些其他算法问题,比如:二叉树的最近公共祖先问题等等。

总之,带有兄弟指针的二叉树是一种非常方便的数据结构,在LeetCode中也经常被用来作为算法题的载体。掌握它对于程序员们来说是一项很有帮助的技能。