Python实现打印二叉树某一层的所有节点

不多说,直接贴程序,如下所示

# -*- coding: utf-8 -*-

# 定义二叉树节点类
class TreeNode(object):
    def __init__(self,data=0,left=0,right=0):
        self.data = data
        self.left = left
        self.right = right

# 遍历某一层所有节点,并打印
def TransLevel(root,level):
    if root == None:
        return
    else:
        if level == 1 and  isinstance(root, TreeNode):
            print "%s " % root.data,
        else:
            if isinstance(root, TreeNode):
                TransLevel(root.left, level-1)
                TransLevel(root.right, level-1)

# 建立的二叉树
# ------------------------
#          root
#       7        8
#     6
#   2   5
# 1    3 4
#
# -------------------------

n1 = TreeNode(data=1)
n2 = TreeNode(2,n1,0)
n3 = TreeNode(3)
n4 = TreeNode(4)
n5 = TreeNode(5,n3,n4)
n6 = TreeNode(6,n2,n5)
n7 = TreeNode(7,n6,0)
n8 = TreeNode(8)
root = TreeNode(‘root‘,n7,n8)

TransLevel(root, 5)

参考资料:

1、python数据结构之二叉树遍历的实现
http://www.cnblogs.com/yupeng/p/3414451.html

2、打印二叉树某一层的节点
http://www.cnblogs.com/-Lei/archive/2013/02/25/2928629.html

时间: 2024-10-09 18:07:43

Python实现打印二叉树某一层的所有节点的相关文章

打印二叉树的所有最右节点

解法:使用按层遍历二叉树的非递归形式 每次到达此层末尾时就打印. public class PrintTreeRightNode { public static class Node{ private Node left; private Node right; private int value; public Node(int value){ this.value = value; } } //按层遍历使用队列. public void printTreeRightNode(Node hea

【36】按层打印二叉树

算法题目大都比较抽象,可以通过举例子来搞清楚具体的逻辑. 题目: 从上到下,按照从左往右打印二叉树每一层的结点. 二叉树的结点: class BinaryTreeNode{ int mValue; BinaryTreeNode mLeft;; BinaryTreeNode mRight; } 思路: 我们发现规律:先遍历的结点,它的子节点也会先被遍历到,是一个先进先出的模型,考虑用队列来实现. 没遍历一个结点时候,就把它的孩子结点取出来,放到队列的尾部,然后重复这个过程,直到队列为空. 代码:

按层打印二叉树--每行打印一层

一,问题介绍 给定一棵二叉树,按照层序遍历的顺序打印二叉树.但是要求,每一行打印一层数据. 二,算法分析 借助二叉树的层序遍历来实现.但是需要额外两个变量.一个变量用来保存当前层 还未打印的结点个数,另一个变量保存下一层待打印的结点个数. 二叉树层序遍历参考:http://www.cnblogs.com/hapjin/p/5409921.html 层序打印参考: 1 public void printTree(BinaryNode<T> root){ 2 if(root == null) 3

从上往下打印二叉树(分层遍历)

从上往下打印二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 从上到下打印二叉树的规律:每一次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾.接下来到队列的头部取出最早进入队列的节点,重复前面的打印操作,直到队列中所有的节点都被打印出来为止. struct TreeNode { int val; TreeNode* left; TreeNode* right; }; void LevelOrder(BinaryTreeNode* root) { if (roo

剑指Offer面试题23(Java版):从上往下打印二叉树

题目:从上往下打印二叉树的每个结点,同一层的结点按照从左到右的顺序打印.例如输入下图的二叉树,则一次打印出8,6,10,5,7,9,11. 这道题实质上考察的就是树的遍历算法,只是这种遍历不是我们熟悉的前序.中序或者后序遍历.由于我们不太熟悉这种按层遍历的方法,可能已下载也想不清楚遍历的过程. 因为按层打印的顺序决定应该先打印的根节点,所以我们从树的根节点开始分析.为了接下来能够打印8的结点的两个子节点,我们应该在遍历到该结点时把值为6和10的两个结点保存到一个容器中,现在容器内就有两个结点了.

剑指OFFER之从上往下打印二叉树(九度OJ1523)

题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行一个整数n(1<=n<=1000, :n代表将要输入的二叉树元素的个数(节点从1开始编号).接下来一行有n个数字,代表第i个二叉树节点的元素的值.接下来有n行,每行有一个字母Ci.Ci='d'表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号.Ci='l'表示第i个节点有一个左孩子,紧接着是左孩子的编号.Ci='r'表示第i个节点有一个右孩

按层换行打印二叉树

题目描述:  二叉树,按层打印,并且每层换行 分析:  我们知道,二叉树的层序遍历需要借助队列来实现,每取出一个节点打印,并将该节点的左右孩子放入队列中,依此反复,直到队列为空时,也就完成了二叉树的按层打印. 基本过程如图所示: 但是,关键是怎么换行? 分析:要换行则需要知道什么时候换行,由二叉树我们可以分析,我们需要知道每一层最右边的节点,每次打印完这个节点的值后,再打印一个换行即可.于是我们这样做: 定义两个变量,last 和 nlast last : 表示正在打印的当前行的最右节点 nla

数据结构-从上往下打印二叉树

题目:从上往下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 分析:其实就是按层的遍历方式 #include <iostream> #include <deque> using namespace std; struct BinaryTree{ int data; BinaryTree* lchild; BinaryTree* rchild; }; void PrintLeverTree(BinaryTree* root){ if(root == NULL){ ret

59、剑指offer--按之字形顺序打印二叉树

题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 解题思路:通过分析,使用栈进行存储结点 打印1时,将结点2 3 放入栈中,打印3时,将3的左右孩子67分别放入栈中想放入7 再放6. 通过举例分析,对于父结点在偶数行,先放入右子结点.再放入左子结点(栈2),对于父结点在奇数行,先放入左子结点再放入右子结点(栈1).因此使用两个栈进行存储. 使用两个栈的原因,例如2 3 都在栈中,弹出3,需要