二叉树问题---打印二叉树的边界节点
来源:互联网 发布:js的某个div全屏显示 编辑:程序博客网 时间:2024/06/07 17:09
问题:
给定一棵二叉树的头节点,按照如下两种标准分别实现二叉树边界节点的逆时针打印。
标准一:
1.头节点为边界节点2.叶节点为边界节点3.如果节点在其所在层中的最左边或最右边,那么也是边界节点
标准二:
1.头节点为边界节点2.叶节点为边界节点3.树左边界延伸下去的路径为边界节点4.树右边界延伸下去的路径为边界节点
#标准一def printEdge1(root): def getHeight(root, height=0): if not root: return 0 return max(getHeight(root.left, height+1), getHeight(root.right, height+1)) + 1 def getMap(root, i, map): if not root: return if map[i][0] == None: map[i][0] = root map[i][1] = root getMap(root.left, i+1, map) getMap(root.right, i+1, map) def printLeafNotInMap(root, i, map): if not root: return if not root.left and not root.right and root != map[i][0] and \ root != map[i][1]: print(root.val, end=' ') printLeafNotInMap(root.left, i+1, map) printLeafNotInMap(root.right, i+1, map) if not root: return height = getHeight(root) map = [[None for i in range(2)] for j in range(height)] getMap(root, 0, map) for i in range(len(map)): print(map[i][0].val, end=' ') printLeafNotInMap(root, 0, map) for i in range(len(map)-1, -1, -1): if map[i][0] != map[i][1]: print(map[i][1].val, end=' ')#标准二def printEdge2(root): def printLeft(root, isPrint): if not root: return if isPrint or (root.left == None and root.right == None): print(root.val, end=' ') printLeft(root.left, isPrint) printLeft(root.right, bool(isPrint and root.left == None)) def printRight(root, isPrint): if not root: return printRight(root.left, bool(isPrint and root.right == None)) printRight(root.right, isPrint) if isPrint or (root.left == None and root.right == None): print(root.val, end=' ') if not root: return print(root.val, end=' ') if root.left and root.right: printLeft(root.left, True) printRight(root.right, True) elif root.left: printEdge2(root.left) elif root.right: printEdge2(root.right)
阅读全文
2 0
- 二叉树问题---打印二叉树的边界节点
- 打印二叉树边界节点
- 打印二叉树的边界节点
- 打印二叉树的边界节点
- 打印二叉树的边界节点-代码指南
- 打印二叉树的边界节点 c++实现
- 打印二叉树的边缘节点
- 打印二叉树的边缘节点
- 打印二叉树的边缘节点
- 3.10分层打印二叉树的节点
- 按照之字形打印二叉树的节点
- 打印二叉树的叶子节点
- 打印二叉树中某个节点的所有父节点
- 打印二叉树中一个节点的所有祖先节点
- 二叉树问题---二叉树节点间的最大距离
- 二叉树问题---统计完全二叉树的节点个数
- 二叉树打印叶子节点||打印分支节点
- 二叉树问题---较为直观的打印二叉树
- JavaScript设计模式(三) 数据访问对象模式
- 一分钟了解“结构张量”
- IOS下的 NSTimer与Run loop Modes
- 二叉树问题---较为直观的打印二叉树
- java8 lambda表达式在集合中的应用
- 二叉树问题---打印二叉树的边界节点
- POJ 2992 Divisors
- RHCE——控制服务和守护进程
- 二叉树问题---二叉树的序列化和反序列化
- 将十进制数转化为二进制数
- 杭电acm1201过生日
- CSS定位
- JAVA中字符串比较equals()和equalsIgnoreCase()的区别
- Codeforces Round #426 (Div. 2) C. The Meaningless Game