目錄
輸入
輸出
解釋
範例
首頁 後端開發 C++ 將給定二元搜尋樹中的所有較大值新增到每個節點上

將給定二元搜尋樹中的所有較大值新增到每個節點上

Sep 07, 2023 pm 12:17 PM
節點 二元搜尋樹 較大值

將給定二元搜尋樹中的所有較大值新增到每個節點上

BST或二元搜尋樹是一種二元樹形式,其中所有左節點的值小於根節點的值,且所有右節點的值都大於根節點的值。對於這個問題,我們將取一個二元樹並將所有大於當前節點值的值加到它中。問題「在BST的每個節點上加入所有較大的值」被簡化為對於BST,將所有大於目前節點值的節點值加到該節點值。

在BST中的每個節點上加入所有較大的值問題陳述:

給定一個二元搜尋樹(BST),我們需要為每個節點添加所有較大值節點的總和。

輸入

    10
    /  \
   /    \
  5     20
 / \   / \
1   7   1  5
登入後複製

輸出

      70
    /   \
   82   45
  / \   / \
83 77  60 25
登入後複製

解釋

這個程式將把一個二元搜尋樹轉換為一個二元樹,其中節點的值為所有較大元素的和加上節點的原始值。

將所有較大的值新增至二元搜尋樹解決方案中的每個節點:

我們使用逆向中序遍歷(先遞歸呼叫右子樹而不是左子樹),並維護一個變數來儲存到目前為止已經遍歷過的節點的和。

然後,我們使用這個和來修改目前節點的值,首先將其值加到和上,然後用這個和替換節點的值。

範例

#include <iostream >
using namespace std;
struct node {
   int data;
   node *left;
   node *right;
};
node *newNode(int key) {
   node *temp=new node;
   temp->left=NULL;
   temp->right=NULL;
   temp->data=key;
   return temp;
}
void Inorder(node *root) {
   if(!root)
      return;
   Inorder(root->left);
   cout<<root->data<<" ";
   Inorder(root->right);
}
node *Insert(node *root,int key) {
   if(!root)
      return newNode(key);
   if(key<root->data)
      root->left=Insert(root->left,key);
   else
      root->right=Insert(root->right,key);
   return root;
}
void RevInorderAdd(node *root,int &sum) {
   if(!root)
      return;
   RevInorderAdd(root->right,sum);
   sum+=root->data;
   root->data=sum;
   RevInorderAdd(root->left,sum);
}
void AddGreater(node *root) {
   int sum=0;
   RevInorderAdd(root,sum);
}
int main() {
   /* Let us create following BST
      10
      / \
     5   20
    / \  / \
  1  7 15 25 */
   node *root = NULL;
   root = Insert(root, 10);
   Insert(root, 20);
   Insert(root, 25);
   Insert(root, 15);
   Insert(root, 5);
   Insert(root, 7);
   Insert(root, 1);
   Inorder(root);
   cout<<endl;
   AddGreater(root);
   Inorder(root);
   cout<<endl;
   return 0;
}
登入後複製
#

以上是將給定二元搜尋樹中的所有較大值新增到每個節點上的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

查詢從節點X開始,距離最多為D的子樹中的最小權重 查詢從節點X開始,距離最多為D的子樹中的最小權重 Aug 25, 2023 am 11:25 AM

在進行電腦程式設計時,有時需要求出源自特定節點的子樹的最小權重,條件是該子樹不能包含距離指定節點超過D個單位的節點。這個問題出現在各個領域和應用中,包括圖論、基於樹的演算法和網路最佳化。子樹是較大樹結構的子集,指定的節點作為子樹的根節點。子樹包含根節點的所有後代及其連接邊。節點的權重是指分配給該節點的特定值,可以表示其重要性、重要性或其他相關指標。在這個問題中,目標是找​​到子樹中所有節點中的最小權重,同時將子樹限制在距離根節點最多D個單位的節點。在下面的文章中,我們將深入研究從子樹中挖掘最小權重的複雜性

使用佇列反轉二元搜尋樹中的路徑的C++程式碼 使用佇列反轉二元搜尋樹中的路徑的C++程式碼 Sep 14, 2023 pm 07:21 PM

例如,給定一個二元搜尋樹,我們需要從特定鍵反轉其路徑。尋找解決方案的方法在這種方法中,我們將建立一個佇列並推送所有節點,直到我們獲得根節點。 p>範例 #include<bits/stdc++.h>usingnamespacestd;structnode{  intkey;  structnode*left,*right;};structnode*newNode(intitem){&nb

如何透過Vue和jsmind實現心智圖的節點複製和剪切功能? 如何透過Vue和jsmind實現心智圖的節點複製和剪切功能? Aug 15, 2023 pm 05:57 PM

如何透過Vue和jsmind實現心智圖的節點複製和剪切功能?心智圖是一種常見的思考工具,能夠幫助我們整理想法、梳理思考邏輯。而節點複製和剪切功能是心智圖中常用的操作,能讓我們更方便重複利用現有的節點,提高思考整理的效率。在本文中,我們將使用Vue和jsmind這兩個工具來實現心智圖的節點複製和剪切功能。首先,我們需要安裝Vue和jsmind,並創建

Python如何實作二元搜尋樹 Python如何實作二元搜尋樹 Jun 10, 2023 am 08:57 AM

二元搜尋樹(BinarySearchTree,BST)是一種基於二元樹的搜尋演算法。它的特徵是在樹中每個節點的左子樹中的值都小於這個節點的值,而右子樹中的值則大於這個節點的值。因此,BST的搜尋和插入操作的時間複雜度是O(logN)。在Python中實作二元搜尋樹的方法比較簡單,因為Python內建了列表和字典這兩種資料結構,它們都可以用來實作二元樹。在這

C++中的二元堆和二元搜尋樹 C++中的二元堆和二元搜尋樹 Aug 22, 2023 pm 04:10 PM

在C++程式設計中,二元堆和二元搜尋樹是兩種常用的資料結構,它們具有相似之處,但是也有不同點。本文將分別介紹二元堆和二元搜尋樹的概念、基本操作及其應用場景。一、二叉堆1.1概念二元堆是一種完全二元樹,滿足以下兩種性質:1.1.1堆序性堆序性指在一個二元堆中,每個節點的值都不大於(或不小於)其父節點的值。這裡以最大堆為例,根節點的值是整個樹中最大的值,而

js刪除節點的方法是什麼 js刪除節點的方法是什麼 Sep 01, 2023 pm 05:00 PM

js刪除節點的方法有:1、removeChild()方法,用於從父節點移除指定的子節點,它需要兩個參數,第一個參數是要刪除的子節點,第二個參數是父節點;2、parentNode.removeChild()方法,可以直接透過父節點呼叫來刪除子節點;3、remove()方法,可以直接刪除節點,而無需指定父節點;4、innerHTML屬性,用於刪除節點的內容。

使用佛洛伊德-沃沙爾演算法找到任兩個節點之間的最短路徑 使用佛洛伊德-沃沙爾演算法找到任兩個節點之間的最短路徑 Sep 20, 2023 pm 02:21 PM

C++有一個宏,它被定義為一段程式碼或期望的值,並且每當使用者需要時,它將被重複使用。佛洛伊德-沃爾夏爾演算法是在給定的加權圖中找到所有頂點對之間最短路徑的過程。該演算法遵循動態規劃的方法來找到最小權重圖。讓我們透過圖表來理解佛洛伊德-沃爾夏爾演算法的意義-以頂點1為來源,頂點4為目的地,求它們之間的最短路徑。我們已經看到有兩條路徑可以連接到目標頂點4。1->4–邊的權重為51->8->3->4–邊權重(1+2+1)為4。在給定的圖I中,我們看到兩個頂點之間連接的最小邊。所以這裡頂點

Java利用Math類別的max()函數取得兩個數中的較大值 Java利用Math類別的max()函數取得兩個數中的較大值 Jul 24, 2023 pm 11:17 PM

Java利用Math類別的max()函數來取得兩個數字中較大的值在Java程式設計中,我們常常需要比較兩個數的大小,然後選擇較大的數來進行一些運算。 Java中的Math類別提供了許多數學運算的函數,其中max()函數可以幫助我們取得兩個數中的較大值。 Math.max()函數的定義如下:publicstaticintmax(inta,intb)此函數接受兩個整數

See all articles