给定一个二叉树,返回其中序遍历。(分别用递归算法和非递归算法)
示例:
输入:[1,null,2,3]
输出: [1,3,2]
非递归算法(栈):
//c++和java
c++:
void BinaryTree<T>::inOrderTraverse(){
LinkedStack<BinaryNode<T>*>stack;
BinaryNode<T>*p=this->root;
while(p!=NULL||!stack.empty())
if(p!=null){
stack.push(p);
p=p->left;
}
else{
p=stack.pop();
cout<<p->data<<" ";
p=p->right;
}
cout<<endl;
}
java:
class Solution {
List<Integer> list=new ArrayList<Integer>();
public List<Integer> inorderTraversal(TreeNode root) {
inorderT(root);
return list;
}
public void inorderT(TreeNode root){
if(root!=null){
inorderT(root.left);
list.add(root.val);
inorderT(root.right);
}
}
}
递归算法:
class Solution {
List<Integer> list=new ArrayList<Integer>();
public List<Integer> inorderTraversal(TreeNode root) {
inorderT(root);
return list;
}
public void inorderT(TreeNode root){
if(root!=null){
inorderT(root.left);
list.add(root.val);
inorderT(root.right);
}
}
}