唯一需要注意的就是裡面幾種遍歷的非遞迴實現,借助了佇列和棧來進行實現。
下面是完整的**:
#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...