二叉樹的基本知識

2021-09-14 03:55:35 字數 3586 閱讀 1498

基本**:

#pragma once

#include #include #include #include using namespace std;

template struct binarytreenode

};template class binarytree

binarytree(t* a, size_t n, const t& invalid)

node* createtree(t* a, size_t n, const t& invalid, size_t& index)

return root;

} ~binarytree()

void destroy(node* root) //後序刪除

destroy(root->_left);

destroy(root->_right);

delete root;

} //t2(t1)

binarytree(const binarytree& t) //拷貝構造

node* _copy(node* root)

node* newroot = new node(root->_data);

newroot->_left = _copy(root->_left);

newroot->_right = _copy(root->_right);

return newroot;

} //傳統寫法

binarytree& operator=(const binarytree& t) //賦值運算子的過載

return *this;

} //現**法

/*binarytree& operator=(binarytreet)//呼叫拷貝建構函式拷貝t

*/ void prevorder()

void inorder()

void postorder()

void levelorder()

void prevordernonr() //非遞迴《利用棧》

node* front = s.top();

s.pop();

//子問題的方式訪問右樹

cur = front->_right;

} }void inordernonr()

node* front = s.top();

cout << front->_data << " ";

s.pop();

//訪問右樹,子問題

cur = front->_right;

} }void postordernonr()

node* front = s.top();

if (front->_right == null || front->_right== prev)

else

}cout << endl;

} size_t getklevel(size_t k) //k層葉子節點數

size_t depth()

size_t size()

size_t leafsize() //求葉子節點數

node* find(const t& x)

protected:

void _prevorder(node* root) //前序

cout << root->_data << " ";

_prevorder(root->_left);

_prevorder(root->_right);

}void _inorder(node* root) //中序

_inorder(root->_left);

cout << root->_data << " ";

_inorder(root->_right); }

void _postorder(node* root) //後序

_postorder(root->_left);

_postorder(root->_right);

cout << root->_data << " ";

} //寬度

//大數

void _levelorder() // 層序//思想:用佇列的先進先出//在寫一遍

while (!q.empty())

if (front->_right)

q.pop();

} cout << endl;

} bool iscompletetree() //判斷是否為完全樹 // 層序//思想:用佇列的先進先出//在寫一遍

bool tag = true;

while (!q.empty())

q.push(front->_left);

}else

if (front->_right)

q.push(front->_right);

}else

}} size_t _getklevel(node* root, size_t k) //第k層的節點數

if (k == 1)

return _getklevel(root->_left, k - 1) + _getklevel(root->_right, k - 1);

} size_t _depth(node* root) //求二叉樹的深度

if (root->_left == null && root->_right == null)

size_t left = _depth(root->_left);

size_t right = _depth(root->_right);

return (left > right) ? left + 1 : right + 1;

} size_t _size(node* root) //求總節點個數

return _size(root->_left) + _size(_root->_right) + 1;

} size_t _leafsize(node* root) //求葉子節點數

else //不是空樹

return _leafsize(root->_left) + _leafsize(root->_right);

} }node* _find(node* root, const t& x)

if (root->_data == x)

node* ret = _find(root->_left, x);//要接受返回值

if (ret) //ret不等於空說明找到了

else

}bool isintree(node* root, const t& x) //思考

if (root->_data == x)

/*if (isintree(root->_left,x))

return isintree(root->_right,x); */

//或者

return isintree(root->_left, x) || isintree(root->_right, x);

} node* _root;

};

二叉樹 基本知識點

資料結構實驗之二叉樹二 遍歷二叉樹 problem description 已知二叉樹的乙個按先序遍歷輸入的字串行,如abc,de,g,f,其中,表示空結點 請建立二叉樹並按中序和後序的方式遍歷該二叉樹。input 連續輸入多組資料,每組資料輸入乙個長度小於50個字元的字串。output 每組輸入資...

資料結構 二叉樹的基本知識點總結

樹是一種資料結構,它是由n n 1 個有限的結點組成的具有層次關係的集合。樹具有的特點有 1 每個結點有零個或多個子結點 2 沒有父節點的結點稱為根節點 3 每乙個非根結點有且只有乙個父節點 4 除了根結點外,每個子結點可以分為多個不相交的子樹。樹的基本術語有 若乙個結點有子樹,那麼該結點稱為子樹根...

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...