二叉樹的基本實現和遍歷 遞迴

2021-08-09 03:29:13 字數 2674 閱讀 1681

二叉樹

//建立結構體
templatestruct 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(const binarytree& t)//拷貝函式

node* _binarytree(node* root)

return newroot;

} ~binarytree()//析構函式

void _destroybinarytree(node* &root)

}//遞迴實現四種遍歷

void prevorder()//前序遍歷

void _prevorder(node* root)

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

_prevorder(root->_left);

_prevorder(root->_right);

} void inorder()//中序遍歷

void _inorder(node* root)

_inorder(root->_left);

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

_inorder(root->_right);

} void postorder()//後序遍歷

void _postorder(node* root)

_postorder(root->_left);

_postorder(root->_right);

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

} void levelorder()//層序遍歷

queueq;

q.push(_root);

cout << "levelorder" << endl;

while (!q.empty())//如果佇列不為空

cout << endl;

}

//查詢結點個數和深度

size_t size()//結點個數

size_t _size(node* root)

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

} size_t leafsize()//葉子結點個數

size_t _leafsize(node* root)

//二叉樹不為空,左子樹右子樹為空

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

//二叉樹不為空,且左右子樹不同時為空,返回左子樹中葉子節點個數加上右子樹中葉子節點個數

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

} size_t getklevel(size_t k)//第k層的結點數

size_t _getklevel(node* root, size_t k)

size_t depth()

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

else

}

//查詢、賦值

node* find(const t& x)//查詢二叉樹結點

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

binarytree& operator=(const binarytree& t)

return *this;

}

protected:node* _root;};

//測試**

void testbinarytree()

; binarytreet(array, sizeof(array) / sizeof(array[0]), '#');

t.prevorder();

t.inorder();

t.postorder();

t.levelorder();

//cout << "find?" << t.find(4) << endl;

/*binarytreet1(t);

t1.prevorder();

t1.postorder();

binarytreet2 = t;

t2.prevorder();*/

//cout << "size?" << t.size() << endl;

//cout << "leafsize?" << t.leafsize() << endl;

//cout << "getklevel?" << t.getklevel(3) << endl;

//cout << "depth?" << t.depth() << endl;

}

二叉樹遍歷遞迴實現

include include define flag int define l 0 define r 1 typedef struct tree tree tree init tree int data void destroy tree tree root void insert tree t,...

遍歷二叉樹 遞迴實現

二叉樹作為樹的一種,是一種重要的資料結構,也是面試官經常考的東西。二叉樹中的面試題比較常見的題型大概有下面幾個 建立一顆二叉樹 先序,中序,後序 遍歷一顆二叉樹 先序,中序,後序和層次遍歷 求二叉樹中葉子節點的個數 求二叉樹的高度等等。binarytree.h pragma once templat...

二叉樹遍歷遞迴實現

二叉樹遍歷遞迴實現 由三種遍歷順序可看出 先序遍歷遞迴實現 c void preorder node r 中序遍歷遞迴實現 c void inorder node r 後序遍歷遞迴實現 c void posorder node r 完整可執行c include include using names...