给你一棵树,怎么用非递归方式去查找里面满足要求的某些节点?
可以用队列来实现,举例如下:
Android界面就是基于一棵树的结构来进行显示的,怎样通过一个ViewGroup,非递归式的找到它下面所有Button控件?借助一个队列,依次存储该根节点及其下面所有ViewGroup子节点,然后通过while循环出队列,出队列时,获取该节点的所有子节点,如果是ViewGroup,将该节点入队列,如果不是,则判断是否是Button,是就找到了一个,不是就判断下一个节点,代码如下:
fun findAllButtonsInRootView(rootView: ViewGroup) {
val viewQueue = ArrayDeque<ViewGroup>()
viewQueue.add(rootView)
while (!viewQueue.isEmpty()) {
val view = viewQueue.poll()
for (i in 0..view.childCount) {
val childView = view.getChildAt(i)
if (childView is ViewGroup) {
viewQueue.add(childView)
} else if (childView is Button) {
println("find : $childView")
}
}
}
}