本小白华中科技大学在读研究生,自然语言处理方向。现每日一更LeetCode Top 100 Liked Questions, 旨在于通过通俗易懂的画风和诸位计算机朋友们一起成长呀,不局限某题,争取举一反三,所有Questions均呈上C++和Java解法,不足之处多多指正,共同学习。
关于二叉树,我写过合并二叉树、求二叉树树高和转换二叉树,有兴趣的同学可以扩展一下。
中序遍历(遍历左子树—访问节点—遍历右子树),最基本的数据结构知识点。
递归法
class Solution {
public:
vector<int> result;
vector<int> inorderTraversal(TreeNode* root) {
if(root != NULL){
inorderTraversal(root->left);
result.push_back(root->val);
inorderTraversal(root->right);
}
return result;
}
};
非递归法(利用堆栈)
c++版本
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
stack<TreeNode*> s;
TreeNode* node = root;
while(node || !s.empty()){
while(node){
s.push(node);
node = node->left;
}
if(!s.empty()){
node = s.top();
s.pop();
result.push_back(node->val);
node = node->right;
}
}
return result;
}
java版本
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
Stack<TreeNode> s = new Stack<>();
TreeNode node = root;
while(node != null || !s.empty()){
while(node != null){
s.push(node);
node = node.left;
}
if(!s.empty()){
node = s.peek();
s.pop();
result.add(node.val);
node = node.right;
}
}
return result;
}