二叉樹
//建立結構體
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
}
protected:node* _root;};//查詢、賦值
node* find(const t& x)//查詢二叉樹結點
node* _find(node* root, const t& x)
binarytree& operator=(const binarytree& t)
return *this;
}
//測試**
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...