實驗目的:實現簡單的二叉樹!
標頭檔案:
二叉樹.h
#ifndef 二叉樹_h__
#define 二叉樹_h__
#include
#include
templateclass binarytree;//二叉樹的宣告
/*樹的節點*/
template
class treenode };
//二叉樹的定義
template
class binarytree;
template
void binarytree::levelorder()
template
void binarytree::levelorder(treenode*currentnode)
if (currentnode->rightchild)
if (q.empty())
//在彈出乙個節點時,我們要先把它的左右孩子先放進佇列裡
currentnode = q.front();//取隊首的節點,
q.pop();}}
template
void binarytree::visit(treenode*currentnode)
template
void binarytree::endorder()
template
void binarytree::endorder(treenode*currentnode)}
template
void binarytree::preorder()
template
void binarytree::preorder(treenode*currentnode)
}template
void binarytree::inorder()
template
void binarytree::inorder(treenode*currentnode)
}#endif // 二叉樹_h__
/* 遍歷的規則:
中序遍歷:左子樹-節點-右子樹
先序遍歷:節點-左子樹-右子樹
後序遍歷:左子樹-右子樹-節點
層序遍歷:一層一層遍歷*/
實驗的二叉樹圖
原始檔
main.cpp
#include
#include "二叉樹.h"
using namespace std;
int main(int argc,const char* argv);
#endif
#include "node.h"
node::node(){}
node::node(int item)
node::~node(){}
void node::setdata(int item)
int node::getdata()
void node::setleft(node* left)
node* node::getleft()
void node::setright(node* right)
node* node::getright()
#pragma once
#ifndef binarytree_h__
#define binarytree_h__
#include "node.h"
class binarytree;
#endif // binarytree_h__
#include "binarytree.h"
#include
#include
using namespace std;
binarytree::binarytree()
binarytree::~binarytree(){}
//獲取根節點
node* binarytree::getroot()
void binarytree::creatbinarytree() //建立一棵二叉樹
}//新增節點函式
void binarytree::addnode(node* newnode, node* root)
else }
else if (toright(newnode->data, root->data))
else}}
void binarytree::preorder(node* t)//先根遍歷
}void binarytree::inorder(node* t)//中根遍歷
}void binarytree::postorder(node* t)//後根遍歷}
//層序遍歷
void binarytree::levelorder(node* t)
//把有孩子放進去
if (t->right!=nullptr)
if (myqueue.empty())
//獲取當前的節點
t = myqueue.front();
myqueue.pop(); }
}//尋找data為item的節點
node* binarytree::finddata(node* t, int item)
else if (t->getdata()==item)
else if ((p=finddata(t->getleft(),item))!=nullptr)
else
}//尋找給定節點的父節點
node* binarytree::returnfather(node* t, node *p)
else if (t->getleft()==p || t->getright()==p)
else if ((q=returnfather(t->getleft(),p))!=nullptr)
else
}//刪除t節點及其左右子樹
void binarytree::deletesubtree(node* t)
else if (t==root)
node* p, *q;
p = t;
q = returnfather(root, p);
if (q)
else
}deletall(p);
}//判斷新增節點是否比根小
bool binarytree::toleft(int newitemvalue, int rootvalue)
else
}//無情乾掉子節點和左右子樹
資料結構之二叉樹實現
1.二叉樹的原理分析 樹是一種重要的非線性資料結構,直觀地看,它是資料元素 在樹中稱為結點 按分支關係組織起來的結構。二叉樹 binary tree 是每個節點最多有兩個子樹的有序樹。通常子樹被稱作 左子樹 和 右子樹 二叉樹演算法的排序規則 1 選擇第乙個元素作為根節點 2 之後如果元素大於根節點...
資料結構之二叉樹 C 二
目錄 table of contents 類的部分實現 二叉樹是一種特殊的樹,在上一節中也介紹了樹的其他形式,例如 霍夫曼樹,b樹等。其中,二叉樹的常用操作有 1.確定樹高 2.確定元素數目 3.複製 4.顯示或列印二叉樹 5.確定兩顆二叉樹是否一樣 6.刪除整顆樹 這些操作都可以通過有步驟的遍歷二...
資料結構系列之二叉樹(C 實現)
struct treenode 遞迴寫法很水,這裡就不在展開描述了,直接貼 void preorder treenode head cout head val 中 preorder head leftchild 左 preorder head rightchild 右 void inorder tr...