資料結構 遞迴實現二叉樹

2021-07-27 02:56:28 字數 1873 閱讀 1833

二叉樹:

在電腦科學中,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉堆。

二叉樹的每個結點至多只有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2^個結點;深度為k的二叉樹至多有2^k-1個結點;對任何一棵二叉樹t,如果其終端結點數為n_0,度為2的結點數為n_2,則n_0=n_2+1。

一棵深度為k,且有2^k-1個節點稱之為滿二叉樹;深度為k,有n個節點的二叉樹,當且僅當其每乙個節點都與深度為k的滿二叉樹中,序號為1至n的節點對應時,稱之為完全二叉樹。

運用遞迴思想簡單實現一顆二叉樹,這裡得清楚二叉樹的儲存模式,以及重要的前序中序後序遞迴遍歷二叉樹

#define _crt_secure_no_warnings 1

#include

using

namespace

std;

template

struct bintreenode      //節點定義

bintreenode* _left;

bintreenode* _right;

t _value;

};template

class bintree

bintree(const bintree&b)      //拷貝構造

~bintree() //析構

bintreeoperator=(const bintree&b)

return *this;

}void _preorderprint()             //前序遍歷

void _infixprint()                //中序遍歷

void _postprint()                 //後序遍歷

size_t size()

size_t depth() 

protected:

node* _creatbintree(t* a, size_t size, size_t& index, const t& invaild)

return newnode;

}node* _copy(node* root)

return newnode;

}node* _destory(node* root)

return root;

}void _preorder(node* root)

}void _infixorder(node* root)

}void _postorder(node* root)

}size_t _size(node* root)

return size;

}size_t _depth(node *root)

if (depth > maxdepth)

if (root->_right != null)

if (depth > maxdepth)

}return maxdepth;

}protected:

node* _root;

};int main()

; bintree b(a, 10, '#');

b._preorderprint();

b._infixprint();

b._postprint();

cout

<< b.size() << endl;

cout

<< b.depth() << endl;

system("pause");

return

0;}

資料結構 二叉樹練習 遞迴

以孩子兄弟鏈作為樹的儲存結構,編寫乙個求樹高度的遞迴演算法。遞迴模型 設f t 為樹t的高度 f t 0 若t null f t 1 若t沒有孩子節點 f t max f p 1 其他情況 p為t的孩子 int treeheight tsbnode t return max 1 二叉樹應用練習 假設...

遍歷二叉樹(資料結構,遞迴)

在二叉樹的應用中,常常要求在樹中查詢具有某種特徵的結點,或者對全部結點逐一進行某種處理。這就是二叉樹的遍歷問題。所謂二叉樹的遍歷是指按一定的規律和次序訪問樹中的各個結點,而且每個結點僅被訪問一次。訪問 的含義很廣,可以是對結點作各種處理,如輸出結點的資訊等。遍歷一般按照從左到右的順序,共有3種遍歷方...

資料結構 二叉樹遍歷非遞迴實現

資料結構中二叉樹的遍歷主要分為先序,中序和後序。順序是相對根節點來說的。先序中序非遞迴實現比較簡單,後序較為複雜些,需要判斷右子樹是否為空或遍歷完。以下為三種遍歷方法的非遞迴c實現 include include typedef struct binode binode,bitree typedef...