91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎樣python二叉樹中的右側指針

發布時間:2021-12-13 16:22:13 來源:億速云 閱讀:150 作者:柒染 欄目:大數據

怎樣python二叉樹中的右側指針,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

給定一個完美二叉樹,其所有葉子節點都在同一層,每個父節點都有兩個子節點。二叉樹定義如下:

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

填充它的每個 next 指針,讓這個指針指向其下一個右側節點。如果找不到下一個右側節點,則將 next 指針設置為 NULL

初始狀態下,所有 next 指針都被設置為 NULL。 

示例:

怎樣python二叉樹中的右側指針

輸入:{"$id":"1","left":{"$id":"2","left":{"$id":"3","left":null,"next":null,"right":null,"val":4},"next":null,"right":{"$id":"4","left":null,"next":null,"right":null,"val":5},"val":2},"next":null,"right":{"$id":"5","left":{"$id":"6","left":null,"next":null,"right":null,"val":6},"next":null,"right":{"$id":"7","left":null,"next":null,"right":null,"val":7},"val":3},"val":1}


輸出:{"$id":"1","left":{"$id":"2","left":{"$id":"3","left":null,"next":{"$id":"4","left":null,"next":{"$id":"5","left":null,"next":{"$id":"6","left":null,"next":null,"right":null,"val":7},"right":null,"val":6},"right":null,"val":5},"right":null,"val":4},"next":{"$id":"7","left":{"$ref":"5"},"next":null,"right":{"$ref":"6"},"val":3},"right":{"$ref":"4"},"val":2},"next":null,"right":{"$ref":"7"},"val":1}

解釋:給定二叉樹如圖 A 所示,你的函數應該填充它的每個 next 指針,以指向其下一個右側節點,如圖 B 所示。

解題思路:

1,樹問題均可遞歸

2,先填充一層,然后遞歸處理左右子樹

3,由于是完美二叉樹,處理簡單:

左子樹的next是右子樹,?????子樹的next是next的左子樹

/*// Definition for a Node.class Node {public:    int val;    Node* left;    Node* right;    Node* next;
   Node() {}
   Node(int _val, Node* _left, Node* _right, Node* _next) {        val = _val;        left = _left;        right = _right;        next = _next;    }};*/class Solution {public:    Node* connect(Node* root) {        if(root==NULL || root->left==NULL){            return root;        }        root->left->next=root->right;        if(root->next!=NULL){            root->right->next=root->next->left;        }        connect( root->left);        connect(root->right);        return root;    }};

給定一個二叉樹

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

填充它的每個 next 指針,讓這個指針指向其下一個右側節點。如果找不到下一個右側節點,則將 next 指針設置為 NULL

初始狀態下,所有 next 指針都被設置為 NULL

示例:

怎樣python二叉樹中的右側指針

輸入:{"$id":"1","left":{"$id":"2","left":{"$id":"3","left":null,"next":null,"right":null,"val":4},"next":null,"right":{"$id":"4","left":null,"next":null,"right":null,"val":5},"val":2},"next":null,"right":{"$id":"5","left":null,"next":null,"right":{"$id":"6","left":null,"next":null,"right":null,"val":7},"val":3},"val":1}

輸出:{"$id":"1","left":{"$id":"2","left":{"$id":"3","left":null,"next":{"$id":"4","left":null,"next":{"$id":"5","left":null,"next":null,"right":null,"val":7},"right":null,"val":5},"right":null,"val":4},"next":{"$id":"6","left":null,"next":null,"right":{"$ref":"5"},"val":3},"right":{"$ref":"4"},"val":2},"next":null,"right":{"$ref":"6"},"val":1}

解釋:給定二叉樹如圖 A 所示,你的函數應該填充它的每個 next 指針,以指向其下一個右側節點,如圖 B 所示。

提示:

  • 你只能使用常量級額外空間。

  • 使用遞歸解題也符合要求,本題中遞歸程序占用的棧空間不算做額外的空間復雜度

解題思路:

1,本題與上題的唯一不同是不是完美二叉樹

2,因此需要計算next節點是什么:

A,左子樹(若非空)

B,右子樹(若非空)

C,next的子樹

3,左子樹的next 節點有兩種情況:

A,右子樹(若非空)

B,next(或next的next)節點的子樹

4,右子樹的next節點:next(或next的next)節點的子樹

5,由于計算next節點依賴右子樹,所以先遞歸右子樹

/*// Definition for a Node.class Node {public:    int val;    Node* left;    Node* right;    Node* next;
   Node() {}
   Node(int _val, Node* _left, Node* _right, Node* _next) {        val = _val;        left = _left;        right = _right;        next = _next;    }};*/class Solution {public:    Node* connect(Node* root) {        if (root==NULL){            return NULL;        }                if (root->left!=NULL){            if(root->right!=NULL){                root->left->next=root->right;            }else{                root->left->next=nextNode(root->next);            }        }                if(root->right!=NULL){         root->right->next=nextNode(root->next);          }        connect(root->right);        connect(root->left);        return root;    }    Node* nextNode(Node* root){       Node* t=root;        while(t!=NULL){            if (t->left!=NULL){                return t->left;            }            if (t->right!=NULL){                return t->right;            }            t=t->next;        }        return NULL;    }};

看完上述內容,你們掌握怎樣python二叉樹中的右側指針的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泸西县| 安西县| 化州市| 嘉义市| 乌拉特前旗| 临安市| 怀来县| 京山县| 鄂尔多斯市| 沧源| 剑河县| 枝江市| 静海县| 前郭尔| 义马市| 平利县| 绍兴市| 项城市| 建水县| 阿勒泰市| 盐山县| 宣汉县| 昌都县| 甘孜| 和静县| 礼泉县| 奉节县| 永顺县| 平江县| 上犹县| 壶关县| 黄平县| 遂平县| 泽普县| 钟祥市| 梨树县| 昌都县| 开化县| 甘肃省| 开平市| 博客|