您的位置:首页 > 其它

二叉树实现中序遍历(迭代版)

2017-11-05 11:50 162 查看

二叉树实现

二叉树实现代码

中序遍历顺序

首先访问当前节点的左子树(如果存在)

再访问当前节点

最后访问右子树(如果存在)

中序遍历图解



中序遍历代码思路

中序遍历可分解为d+1段

沿最左侧通路自底而上访问各节点

借助辅助栈,将访问的节点放入栈中

自底而上遍历对应的右子树

当右子树中存在左子树时,继续进入左子树向下访问

中序遍历代码

//子树中序遍历
public ArrayList<E> travIn() {
LinkedList<Node<E>> stack = new LinkedList<Node<E>>();//辅助栈
ArrayList<E> al = new ArrayList<E>();
Node<E> x = this;
while(true) {
goAlongLeftBreanch(x,stack);
if(stack.isEmpty())
return al;
x = stack.pop();
al.add(x.e);
x = x.rc;
}
}
rivate void goAlongLeftBreanch(Node<E> x,LinkedList<Node<E>> s) {
while(x != null) {
s.push(x); //将左分支压入栈
x = x.lc;
}
}


迭代版与递归版比较

递归版遍历算法时间、空间复杂度的常系数,相对于迭代版更大。

递归版本代码相对于迭代版本更加简明

参考资料

数据结构(c++语言版)(第三版)

邓俊辉 编著
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树
相关文章推荐