二叉树问题---打印二叉树的边界节点
2017-07-31 01:55
176 查看
问题:
给定一棵二叉树的头节点,按照如下两种标准分别实现二叉树边界节点的逆时针打印。
标准一:
标准二:
给定一棵二叉树的头节点,按照如下两种标准分别实现二叉树边界节点的逆时针打印。
标准一:
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)
相关文章推荐
- 打印二叉树的边界节点
- 打印二叉树的边界节点-代码指南
- 打印二叉树的边界节点
- 打印二叉树的边界节点 c++实现
- 打印二叉树节点数值总和等于某个给定节点的所有路径
- 从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 java
- 逐层打印二叉树节点数据
- 二叉树问题(打印二叉树,二叉树子结构、镜像、遍历,二叉树满足的路径)
- 二叉树问题---寻找搜索二叉树中两个错误的节点
- 微软等数据结构+算法面试100题(21)--二叉树打印到叶子节点的所有路径
- 剑指offer 从上往下打印出二叉树的每个节点
- java 从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- 打印二叉树每一层节点数量
- 二叉树问题(打印二叉树,二叉树子结构、镜像、遍历,二叉树满足的路径)
- 二叉树中最大最小权值节点距离问题
- 打印二叉树两个叶子节点间的路径
- 二叉树问题---在二叉树中找到两个节点的最近公共节点
- 二叉树节点间的最大距离问题
- 打印二叉树的叶子节点