使用C++構(gòu)建一個二叉樹并復(fù)制、輸出。
程序
#include
#include
//#include
#include
#include
#include
#include
#include
using namespace std;
struct TreeNode // 定義二叉樹
{
int val; // 當(dāng)前節(jié)點值用val表示
struct TreeNode *left; // 指向左子樹的指針用left表示
struct TreeNode *right; // 指向右子樹的指針用right表示
TreeNode(int x) :val(x), left(NULL), right(NULL) { } // 初始化當(dāng)前結(jié)點值為x,左右子樹為空
};
//創(chuàng)建樹
TreeNode* insert(TreeNode* tree, int value)
{
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode)); // 創(chuàng)建一個節(jié)點
node->val = value; // 初始化節(jié)點 // malloc函數(shù)可以分配長度
node->left = NULL;
node->right = NULL;
TreeNode* temp = tree; // 從樹根開始
while (temp != NULL)
{
if (value < temp->val) // 小于根節(jié)點就進(jìn)左子樹
{
if (temp->left == NULL)
{
temp->left = node; // 新插入的數(shù)為temp的左子樹
return tree;
}
else // 下一輪判斷
temp = temp->left;
}
else // 否則進(jìn)右子樹
{
if (temp->right == NULL)
{
temp->right = node; // 新插入的數(shù)為temp的右子樹
return tree;
}
else // 下一輪判斷
temp = temp->right;
}
}
return tree;
}
// ************* 輸出圖形二叉樹 *************
void output_impl(TreeNode* n, bool left, string const& indent)
{
if (n->right)
{
output_impl(n->right, false, indent + (left ? "| " : " "));
}
cout << indent;
cout << (left ? '\\' : '/');
cout << "-----";
cout << n->val << endl;
if (n->left)
{
output_impl(n->left, true, indent + (left ? " " : "| "));
}
}
void output(TreeNode* root)
{
if (root->right)
{
output_impl(root->right, false, "");
}
cout << root->val << endl;
if (root->left)
{
output_impl(root->left, true, "");
}
system("pause");
}
// ******************************************
void CopyBiTree(TreeNode* root, TreeNode* newroot) // 復(fù)制二叉樹
{
if (root == nullptr)
return;
else
{
newroot->val = root->val;
if (root->left != nullptr)
newroot->left = new TreeNode(0);
if (root->right != nullptr)
newroot->right = new TreeNode(0);
CopyBiTree(root->left, newroot->left);
CopyBiTree(root->right, newroot->right);
}
//output(newroot);
}
// ====================測試代碼====================
int main()
{
TreeNode* tree =new TreeNode(10); // 樹的根節(jié)點
TreeNode* treeresult;
treeresult = insert(tree, 6); // 輸入n個數(shù)并創(chuàng)建這個樹
treeresult = insert(tree, 4);
treeresult = insert(tree, 8);
treeresult = insert(tree, 14);
treeresult = insert(tree, 12);
treeresult = insert(tree, 16);
TreeNode* mirroot = new TreeNode(10);
CopyBiTree(treeresult, mirroot); // 復(fù)制二叉樹
output(treeresult); // 輸出原二叉樹
output(mirroot); // 輸出復(fù)制的二叉樹
}
結(jié)果

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
程序
+關(guān)注
關(guān)注
117文章
3849瀏覽量
85489 -
C++
+關(guān)注
關(guān)注
22文章
2131瀏覽量
77416 -
二叉樹
+關(guān)注
關(guān)注
0文章
74瀏覽量
13007
發(fā)布評論請先 登錄
相關(guān)推薦
熱點推薦
計算機(jī)二級二叉樹的問題
各位大神,本人馬上要考計算機(jī)二級了,那個二叉樹老是弄不明白,比如一個題目,一棵二叉樹共有25個節(jié)點,其中五個葉子節(jié)點,則度為1的節(jié)點數(shù)為?
發(fā)表于 09-04 09:45
二叉樹算法在單總線技術(shù)中的應(yīng)用
介紹了單總線技術(shù)和二叉樹算法。單總線技術(shù)可以將地址線、數(shù)據(jù)線和控制線合成一根線,并允許在這根線上掛接多個單總線器件。提出了用二叉樹算法搜索單總線器件注冊碼,并
發(fā)表于 03-16 09:38
?20次下載
基于二叉樹的時序電路測試序列設(shè)計
為了實現(xiàn)時序電路狀態(tài)驗證和故障檢測,需要事先設(shè)計一個輸入測試序列?;?b class='flag-5'>二叉樹節(jié)點和樹枝的特性,建立時序電路狀態(tài)二叉樹,按照電路二叉樹節(jié)點(狀態(tài))與樹枝(輸入)的層次邏輯
發(fā)表于 07-12 13:57
?0次下載
二叉樹層次遍歷算法的驗證
實現(xiàn)二叉樹的層次遍歷算法,并對用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”創(chuàng)建的二叉樹進(jìn)行測試。
發(fā)表于 11-28 01:05
?2451次閱讀
二叉樹,一種基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)類型
然后我們再定義一棵深度也為 3 的二叉樹,該二叉樹的 n 個結(jié)點(n≤7),當(dāng)從 1 到 n 的每個結(jié)點都與上圖中的編號結(jié)點一一對應(yīng)時,這二叉樹就稱為完全二叉樹。
二叉樹操作的相關(guān)知識和代碼詳解
樹是數(shù)據(jù)結(jié)構(gòu)中的重中之重,尤其以各類二叉樹為學(xué)習(xí)的難點。在面試環(huán)節(jié)中,二叉樹也是必考的模塊。本文主要講二叉樹操作的相關(guān)知識,梳理面試??嫉膬?nèi)容。請大家跟隨小編一起來復(fù)習(xí)吧。 本篇針對面
二叉樹的前序遍歷非遞歸實現(xiàn)
我們之前說了二叉樹基礎(chǔ)及二叉的幾種遍歷方式及練習(xí)題,今天我們來看一下二叉樹的前序遍歷非遞歸實現(xiàn)。 前序遍歷的順序是, 對于樹中的某節(jié)點,先遍歷該節(jié)點,然后再遍歷其左子樹,最后遍歷其右子
C++基礎(chǔ)語法中的二叉樹詳解
本期是C++基礎(chǔ)語法分享的第十四節(jié),今天給大家來梳理一下樹! ? 二叉樹 BinaryTree.cpp: #include 《stdio.h》#include 《stdlib.h》 #define
C語言數(shù)據(jù)結(jié)構(gòu):什么是二叉樹?
完全二叉樹:完全二叉樹是效率很高的數(shù)據(jù)結(jié)構(gòu)。對于深度為K,有n個節(jié)點的二叉樹,當(dāng)且僅當(dāng)每一個節(jié)點都與深度為K的滿二叉樹中編號從1至n的節(jié)點一一對應(yīng)時,稱為完全
怎么就能構(gòu)造成二叉樹呢?
一直跟著公眾號學(xué)算法的錄友 應(yīng)該知道,我在二叉樹:構(gòu)造二叉樹登場!,已經(jīng)講過,只有 中序與后序 和 中序和前序 可以確定一顆唯一的二叉樹。前序和后序是不能確定唯一的二叉樹的。
C++構(gòu)建并復(fù)制二叉樹
評論