二叉樹的基本操作

2021-08-01 09:56:43 字數 1664 閱讀 4884

唯一需要注意的就是裡面幾種遍歷的非遞迴實現,借助了佇列和棧來進行實現。

下面是完整的**:

#pragma once

#include

#include

#include

using

namespace

std;

//孩子表示法

template

struct binarytreenode

; t _value;

binarytreenode* _pleft;

binarytreenode* _pright;

};template

class binarytree

binarytree(const t array, size_t size, const t& invalid)

//下面使用到了&index,但是不能對乙個常量進行引用,所以要把index定義為乙個變數

binarytree(const binarytree& bt)

binarytree& operator=(const binarytree& bt)

return *this;

}~binarytree()

void preorder()

void postorder()

void midorder()

node* find(const t& value)

void postorder_nor()//非遞迴實現後序

node* ptop = s.top();

if (null == ptop->_pright || ptop->_pright == ppre)

else

pcur = ptop->_pright;}}

void midorder_nor()//非遞迴實現中序

if (null == pcur && !s.empty())}}

void preorder_nor()//非遞迴實現前序

}bool iscompletebinarytree()//利用層序遍歷判斷是否為完全二叉樹

else

else

if (pcur->_pleft)

else

if (pcur->_pright)

else

flag = true;

}q.pop();

}return

true;

}private:

void _createbinarytree(node* &proot, const t array,size_t size, size_t& index,const t& invalid)

}node* copybirnarytree(node* proot)

return pnewnode;

}void _destroybinarytree(node* &proot)

}void _preorder(node* proot)

}void _postorder(node* proot)

}void _midorder(node* proot)

}private:

node* _proot;//根節點

};int main()

二叉樹基本操作

tree.h ifndef tree h define tree h include typedef int element 定義二叉樹 typedef struct nodetreenode void preorder treenode root 遞迴前序遍歷 void inorder treen...

二叉樹基本操作

一.二叉樹的定義 二.二叉樹的建立 定義一棵無資料的二叉樹 6 int left size 7 int right size 為了操作簡便,我們定義一棵不需要儲存資料的二叉樹,只要能儲存節點之間的邏輯關係就行,所以用兩個陣列來表示。left i 第i個節點的左子節點的序號 right i 第i個節點...

二叉樹基本操作

include include define maxsize 100 typedef char elemtype typedef struct node btnode void createbtnode btnode b,char str 由str串建立二叉鏈 j ch str j btnode f...