遍歷二叉樹 遞迴實現

2021-07-14 08:25:30 字數 2301 閱讀 5008

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

"binarytree.h"

#pragma once

templateclass binarytreenode

};templateclass binarytree

binarytree(const t* a,size_t size,const t& invalid)//invalid為非法值

void prevorder()//前序遍歷

//現在左樹中進行尋找

node* ret = _find(root->_left,data);

if (ret)

//再去右樹中進行尋找

return _find(root->_right,data);

} size_t _getklevel(node* root,size_t k)

if (k == 1)

return _getklevel(root->_left,k-1) + _getklevel(root->_right,k-1);//之前把k-1寫成了k--,導致程式錯誤

} size_t _depth(node* root)

return _depth(root->_left) > _depth(root->_right) ? _depth(root->_left)+1 : _depth(root->_right)+1;//三目運算子

} size_t _leafsize(node* root)

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

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

} size_t _size(node* root)

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

} void _postorder(node* root)

_postorder(root->_left);

_postorder(root->_right);

cout<_data<<" ";

} void _inorder(node* root)

_inorder(root->_left);

cout<_data<<" ";

_inorder(root->_right);

} void _prevorder(node* root)

cout<_data<<" ";

_prevorder(root->_left);

_prevorder(root->_right);

} node* _greatetree(const t* a,size_t size,const t& invalid,size_t& inder)//需要改變掉inder的值,所以要用引用

return root;//返回根節點

}private:

node* _root;

};

"test.cpp"

#define _crt_secure_no_warnings 1

#include using namespace std;

#include "binarytree.h"

void testbinarytree()

; int size = sizeof(arr)/sizeof(arr[0]);

binarytreet(arr,size,'#');

cout<<"前序遍歷: ";

t.prevorder();

cout<<"中序遍歷: ";

t.inorder();

cout<<"後序遍歷: ";

t.postorder();

cout<<"有多少個節點? "<>k;

cout<<"第k層節點的個數? "node* ret = t.find(2);

if (ret == null)

{ cout<<"沒找到"<_data<<" ";

cout<<"找到了"<

二叉樹遍歷遞迴實現

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,...

二叉樹遍歷遞迴實現

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

遞迴實現遍歷二叉樹

1 doctype html 2 html lang en 3 head 4 meta charset utf 8 5 title document title 6head 7 body 8 script 9var treenodes 10,2327 28 29 34 35users 36 3746...