Write an iterative method that finds depth of a (non-balanced) binary tree.# JobHunting - 待字闺中I*A2010-07-29 07:071 楼anyone has written it?
z*n2010-07-29 07:072 楼我觉得可以这样做用non-recursive的in-order遍历,每次碰到叶子节点,就数一下当前stack里有几个元素,这就是这条路径的长度,(因为只有根节点入栈,左右孩子不入)剩下就简单了,和当前最长路径比一下就行了,最后结束时的最长路径就是高度【在 I**A 的大作中提到】: anyone has written it?
z*n2010-07-29 07:073 楼好像不对,碰到右边叶子的时候,对应的根节点已经弹出了【在 z****n 的大作中提到】: 我觉得可以这样做: 用non-recursive的in-order遍历,每次碰到叶子节点,就数一下当前stack里有几个元: 素,这就是这条路径的长度,(因为只有根节点入栈,左右孩子不入): 剩下就简单了,和当前最长路径比一下就行了,最后结束时的最长路径就是高度
z*n2010-07-29 07:075 楼代码int maxPath = 0;s.push(root);while(!s.empty){Node* n = s.peek();if(n->left!=null&&!n->left->visited)s.push(n->left);else{if(n->right!=null&&!n->right->visited)s.push(n->right)else{Visit(n);n->visited=true;/* calculating path length */if(n->left==null&&n->right==null) //leaf{int path = s.size();if(path>【在 z****n 的大作中提到】: 改成用non-recursive的后序遍历就对了
I*A2010-07-29 07:078 楼啊,也对, this logic is easier to understand..i like queue better than stack//鄙视自己,简直是随风倒。。【在 h**6 的大作中提到】: non-recursive的BFS最简单,数一数有多少行就行了。