日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

树形数据结构

發布時間:2023/12/19 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树形数据结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// TreeDemo.cpp : 定義控制臺應用程序的入口點。 // #include "stdafx.h" #include <stdio.h> #include <tchar.h> #include <iostream> using namespace std;#include "stdafx.h"#define TYPE char//樹的節點 struct TreeNode{TYPE element;//該節點的元素TreeNode *firstChild;//指向該節點的第一個孩子TreeNode *nextSibling;//指向該節點的兄弟節點};class Tree{public:Tree(TreeNode * r = NULL):root(r){}Tree(int node_num);~Tree();void addNode(int i, int j); void preOrder();//前序遍歷void print();//打印private:void print(TreeNode* node, int num);void addBrotherNode(TreeNode* bro, TreeNode* node);void preOrder(TreeNode* parent);//前序遍歷private:TreeNode * root;//該樹的根 };//打印樹的形狀 void Tree::print() {print(root, 0); }void printSpace(int num) {int i = 0;for(i = 0; i < num-3; i++)cout << " ";for(; i < num-2; ++i)cout << "|";for(; i < num; ++i)cout << "_"; }void Tree::print(TreeNode* node, int num) {if(node != NULL){printSpace(num); cout << node->element << endl; print(node->firstChild, num+4);print(node->nextSibling, num);} }//前序遍歷 void Tree::preOrder() {cout << "前序遍歷: ";preOrder(root);cout << endl; }void Tree::preOrder(TreeNode* parent) {if(parent != NULL){cout << parent->element << " ";preOrder(parent->firstChild);preOrder(parent->nextSibling);} }//分配并初始化所有的樹結點 Tree::Tree(int node_num) {root = new TreeNode[node_num];char ch = 'A';for(int i = 0; i < node_num; ++i){root[i].element = ch + i;root[i].firstChild = NULL;root[i].nextSibling = NULL;}}//釋放所有節點的內存空間 Tree::~Tree() {if(root != NULL)delete [] root; }//addNode將父子結點組對 //如果父節點的firstChild==NULL, 則firstChild = node; //如果父節點的firstChild != NULL, 則 void Tree::addNode(int i, int j) {TreeNode* parent = &root[i];TreeNode* node = &root[j];if(parent->firstChild == NULL)parent->firstChild = node;elseaddBrotherNode(parent->firstChild, node); }//將節點插入到兄弟節點 void Tree::addBrotherNode(TreeNode* bro, TreeNode* node) {if(bro->nextSibling == NULL)bro->nextSibling = node;elseaddBrotherNode(bro->nextSibling, node); }int _tmain(int argc, _TCHAR* argv[]) {Tree tree(16);//分配十六個節點tree.addNode(0, 1);tree.addNode(0, 2);tree.addNode(0, 3);tree.addNode(0, 4);tree.addNode(0, 5);tree.addNode(0, 6); tree.addNode(3, 7);tree.addNode(4, 8);tree.addNode(4, 9);tree.addNode(5, 10);tree.addNode(5, 11);tree.addNode(5, 12);tree.addNode(6, 13);tree.addNode(9, 14);tree.addNode(9, 15);cout << "Tree1: " << endl;tree.preOrder();tree.print(); Tree tree2(9);tree2.addNode(0, 1);tree2.addNode(0, 2);tree2.addNode(1, 3);tree2.addNode(1, 4);tree2.addNode(2, 5);tree2.addNode(3, 6);tree2.addNode(5, 7);tree2.addNode(5, 8);cout << "Tree2: " << endl;tree2.preOrder();tree2.print();return 0; }

樹在內存中:


一條條鏈條拼接起來的,而且一般是由根到葉單向尋找。

對于二叉樹我們節點可以這樣定義:

//樹的節點 struct Node{TYPE element;//該節點的元素Node *leftChild;//左子節點Node *rightChild;//右子節點};

總結

以上是生活随笔為你收集整理的树形数据结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。