使用C++構建一個二叉樹并輸出。
輸入
輸入根節(jié)點為10,依次輸入6、4、8、14、12、16
代碼如下:
#include
#include
#include
#include
#include
#include
#include
using namespace std;
struct TreeLinkNode // 定義二叉樹
{
int val; // 當前節(jié)點值用val表示
struct TreeLinkNode *left; // 指向左子樹的指針用left表示
struct TreeLinkNode *right; // 指向右子樹的指針用right表示
struct TreeLinkNode *parent; //指向父節(jié)點的指針用parent表示
TreeLinkNode(int x) :val(x), left(NULL), right(NULL), parent(NULL) { } // 初始化當前結點值為x,左右子樹、父節(jié)點為空
};
//創(chuàng)建樹
TreeLinkNode* insert(TreeLinkNode* tree, int value)
{
TreeLinkNode* node = (TreeLinkNode*)malloc(sizeof(TreeLinkNode)); // 創(chuàng)建一個節(jié)點
node->val = value; // 初始化節(jié)點
node->left = NULL;
node->right = NULL;
node->parent = NULL;
TreeLinkNode* temp = tree; // 從樹根開始
while (temp != NULL)
{
if (value < temp->val) // 小于根節(jié)點就進左子樹
{
if (temp->left == NULL)
{
temp->left = node; // 新插入的數(shù)為temp的左子樹
node->parent = temp; // temp為新插入的數(shù)的父節(jié)點
return tree;
}
else // 下一輪判斷
temp = temp->left;
}
else // 否則進右子樹
{
if (temp->right == NULL)
{
temp->right = node; // 新插入的數(shù)為temp的右子樹
node->parent = temp; // temp為新插入的數(shù)的父節(jié)點
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); // 樹的根節(jié)點
TreeLinkNode* 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);
output(treeresult); // 輸出圖形二叉樹
}
輸出
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
圖形
+關注
關注
0文章
71瀏覽量
19245 -
C++
+關注
關注
21文章
2085瀏覽量
73301 -
二叉樹
+關注
關注
0文章
74瀏覽量
12283
發(fā)布評論請先 登錄
相關推薦
計算機二級二叉樹的問題
各位大神,本人馬上要考計算機二級了,那個二叉樹老是弄不明白,比如一個題目,一棵二叉樹共有25個節(jié)點,其中五個葉子節(jié)點,則度為1的節(jié)點數(shù)為?
發(fā)表于 09-04 09:45
基于二叉樹的時序電路測試序列設計
為了實現(xiàn)時序電路狀態(tài)驗證和故障檢測,需要事先設計一個輸入測試序列?;?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)建的二叉樹進行測試。
發(fā)表于 11-28 01:05
?2023次閱讀
二叉樹,一種基礎的數(shù)據(jù)結構類型
然后我們再定義一棵深度也為 3 的二叉樹,該二叉樹的 n 個結點(n≤7),當從 1 到 n 的每個結點都與上圖中的編號結點一一對應時,這二叉樹就稱為完全
紅黑樹(Red Black Tree)是一種自平衡的二叉搜索樹
平衡(Balance):就是當結點數(shù)量固定時,左右子樹的高度越接近,這棵二叉樹越平衡(高度越低)。而最理想的平衡就是完全二叉樹/滿二叉樹,高度最小的二叉樹。
二叉樹操作的相關知識和代碼詳解
樹是數(shù)據(jù)結構中的重中之重,尤其以各類二叉樹為學習的難點。在面試環(huán)節(jié)中,二叉樹也是必考的模塊。本文主要講二叉樹操作的相關知識,梳理面試??嫉膬热?。請大家跟隨小編一起來復習吧。 本篇針對面
二叉樹的前序遍歷非遞歸實現(xiàn)
我們之前說了二叉樹基礎及二叉的幾種遍歷方式及練習題,今天我們來看一下二叉樹的前序遍歷非遞歸實現(xiàn)。 前序遍歷的順序是, 對于樹中的某節(jié)點,先遍歷該節(jié)點,然后再遍歷其左子樹,最后遍歷其右子
C++基礎語法中的二叉樹詳解
本期是C++基礎語法分享的第十四節(jié),今天給大家來梳理一下樹! ? 二叉樹 BinaryTree.cpp: #include 《stdio.h》#include 《stdlib.h》 #define
C語言數(shù)據(jù)結構:什么是二叉樹?
完全二叉樹:完全二叉樹是效率很高的數(shù)據(jù)結構。對于深度為K,有n個節(jié)點的二叉樹,當且僅當每一個節(jié)點都與深度為K的滿二叉樹中編號從1至n的節(jié)點一一對應時,稱為完全
怎么就能構造成二叉樹呢?
一直跟著公眾號學算法的錄友 應該知道,我在二叉樹:構造二叉樹登場!,已經講過,只有 中序與后序 和 中序和前序 可以確定一顆唯一的二叉樹。前序和后序是不能確定唯一的二叉樹的。
評論