使用C++構建一個二叉樹并輸出。
輸入
輸入根節點為10,依次輸入6、4、8、14、12、16
代碼如下:
#include
#include
#include
#include
#include
#include
#include
using namespace std;
struct TreeLinkNode // 定義二叉樹
{
int val; // 當前節點值用val表示
struct TreeLinkNode *left; // 指向左子樹的指針用left表示
struct TreeLinkNode *right; // 指向右子樹的指針用right表示
struct TreeLinkNode *parent; //指向父節點的指針用parent表示
TreeLinkNode(int x) :val(x), left(NULL), right(NULL), parent(NULL) { } // 初始化當前結點值為x,左右子樹、父節點為空
};
//創建樹
TreeLinkNode* insert(TreeLinkNode* tree, int value)
{
TreeLinkNode* node = (TreeLinkNode*)malloc(sizeof(TreeLinkNode)); // 創建一個節點
node->val = value; // 初始化節點
node->left = NULL;
node->right = NULL;
node->parent = NULL;
TreeLinkNode* temp = tree; // 從樹根開始
while (temp != NULL)
{
if (value < temp->val) // 小于根節點就進左子樹
{
if (temp->left == NULL)
{
temp->left = node; // 新插入的數為temp的左子樹
node->parent = temp; // temp為新插入的數的父節點
return tree;
}
else // 下一輪判斷
temp = temp->left;
}
else // 否則進右子樹
{
if (temp->right == NULL)
{
temp->right = node; // 新插入的數為temp的右子樹
node->parent = temp; // temp為新插入的數的父節點
return tree;
}
else // 下一輪判斷
temp = temp->right;
}
}
return tree;
}
// ************* 輸出圖形二叉樹 *************
void output_impl(TreeLinkNode* 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(TreeLinkNode* root)
{
if (root->right)
{
output_impl(root->right, false, "");
}
cout << root->val << endl;
if (root->left)
{
output_impl(root->left, true, "");
}
system("pause");
}
// ***************************************
// ====================測試代碼====================
int main()
{
TreeLinkNode tree = TreeLinkNode(10); // 樹的根節點
TreeLinkNode* treeresult;
treeresult = insert(&tree, 6); // 輸入n個數并創建這個樹
treeresult = insert(&tree, 4);
treeresult = insert(&tree, 8);
treeresult = insert(&tree, 14);
treeresult = insert(&tree, 12);
treeresult = insert(&tree, 16);
output(treeresult); // 輸出圖形二叉樹
}
輸出
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
圖形
+關注
關注
0文章
71瀏覽量
19278 -
C++
+關注
關注
22文章
2108瀏覽量
73622 -
二叉樹
+關注
關注
0文章
74瀏覽量
12324
發布評論請先 登錄
相關推薦
基于二叉樹的時序電路測試序列設計
為了實現時序電路狀態驗證和故障檢測,需要事先設計一個輸入測試序列?;?b class='flag-5'>二叉樹節點和樹枝的特性,建立時序電路狀態二叉樹,按照電路二叉樹節點(狀態)與樹枝(輸入)的層次邏輯
發表于 07-12 13:57
?0次下載
二叉樹層次遍歷算法的驗證
實現二叉樹的層次遍歷算法,并對用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”創建的二叉樹進行測試。
發表于 11-28 01:05
?2096次閱讀
紅黑樹(Red Black Tree)是一種自平衡的二叉搜索樹
平衡(Balance):就是當結點數量固定時,左右子樹的高度越接近,這棵二叉樹越平衡(高度越低)。而最理想的平衡就是完全二叉樹/滿二叉樹,高度最小的二叉樹。
二叉樹操作的相關知識和代碼詳解
樹是數據結構中的重中之重,尤其以各類二叉樹為學習的難點。在面試環節中,二叉樹也是必考的模塊。本文主要講二叉樹操作的相關知識,梳理面試常考的內容。請大家跟隨小編一起來復習吧。 本篇針對面
二叉樹的前序遍歷非遞歸實現
我們之前說了二叉樹基礎及二叉的幾種遍歷方式及練習題,今天我們來看一下二叉樹的前序遍歷非遞歸實現。 前序遍歷的順序是, 對于樹中的某節點,先遍歷該節點,然后再遍歷其左子樹,最后遍歷其右子
C++基礎語法中的二叉樹詳解
本期是C++基礎語法分享的第十四節,今天給大家來梳理一下樹! ? 二叉樹 BinaryTree.cpp: #include 《stdio.h》#include 《stdlib.h》 #define
C語言數據結構:什么是二叉樹?
完全二叉樹:完全二叉樹是效率很高的數據結構。對于深度為K,有n個節點的二叉樹,當且僅當每一個節點都與深度為K的滿二叉樹中編號從1至n的節點一一對應時,稱為完全
怎么就能構造成二叉樹呢?
一直跟著公眾號學算法的錄友 應該知道,我在二叉樹:構造二叉樹登場!,已經講過,只有 中序與后序 和 中序和前序 可以確定一顆唯一的二叉樹。前序和后序是不能確定唯一的二叉樹的。
評論