您的位置:首页 > 其它

二叉树的三种遍历方式(递归 和 非递归)

2017-12-07 14:02 232 查看
//先序 递归遍历

public void preorderRecursion(TreeNode root,List list){

if(root != null){

list.add(root.val);

TreeNode left = root.left;

if(left != null){

preorderRecursion(root.left,list);

}

TreeNode right = root.right;

if(right != null){

preorderRecursion(root.right, list);

}

}

}

//先序遍历非递归

public List preorderNotRecursion(TreeNode root){

List result = new ArrayList<>();

Deque stack = new ArrayDeque<>();

TreeNode p = root;

while(!stack.isEmpty() || p != null){

if(p!=null){

stack.push(p);

result.add(p.val);

p = p.left;

}else{

TreeNode node = stack.pop();

p = node.right;

}

}

return result;

}

//中序递归

public void inorderRecursion(TreeNode root,List list){

if(root != null){

TreeNode left = root.left;

if(left != null){

inorderRecursion(root.left,list);

}

list.add(root.val);

TreeNode right = root.right;

if(right != null){

inorderRecursion(root.right, list);

}

}

}

//中序非递归遍历

public List inorderNotRecursion(TreeNode root){

List result = new ArrayList<>();

Deque stack = new ArrayDeque<>();

TreeNode p = root;

while(!stack.isEmpty() || p != null){

if(p != null){

stack.push(p);

p = p.left;

}else{

TreeNode node = stack.pop();

result.add(node.val);

p = node.right;

}

}

return result;

}

//后序递归

public void postorderRecursion(TreeNode root,List list){

if(root != null){

TreeNode left = root.left;

if(left != null){

postorderRecursion(root.left,list);

}

TreeNode right = root.right;

if(right != null){

postorderRecursion(root.right, list);

}

list.add(root.val);

}

}

//后序非递归遍历

public List postorderNotRecursion(TreeNode root){

LinkedList result = new LinkedList<>();

Deque stack = new ArrayDeque<>();

TreeNode p = root;

while(!stack.isEmpty() || p!= null){

if(p != null){

stack.push(p);

result.addFirst(p.val);

p = p.right;

}else{

TreeNode node = stack.pop();

p = node.left;

}

}

return result;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: