Python实现二叉树的前序遍历、中序遍历
计算根节点到叶子节点的所组成的数字(1247, 125, 1367)以及叶子节点到根节点组成的数字(7421, 521, 8631),其二叉树树型结构如下
计算从根节点到叶子节点组成的数字,本质上来说就是二叉树的先序便利的变形,只在每次递归遍历过程中,将上一步计算的结果传到下一轮的递归预算中,其代码如下:
class Tree(object): def __init__(self, val):
self.value = '%s' % str(val)
self.value = val
self.lchild = None
self.rchild = None def __str__(self):
returnList = []
returnList.append(self)
for i in len(returnList):
node = returnList[i]
returnList.append(node.lchild)
returnList.append(node.rchild) return str(returnList) def _repr_(self):
return '<N:%s>' % self.value def TreeSum(depth, value, tree):
if not tree.lchild and not tree.rchild:
print '%s value: %s' % (depth * '\t', value)
else:
#import pdb;pdb.set_trace()
if tree.lchild:
print '%sT%s->lchild --->>>' % (depth * '\t', tree.value)
TreeSum(depth+1, value * 10 + tree.lchild.value, tree.lchild)
if tree.rchild:
print '%sT%s->rchild %s' % (depth * '\t', tree.value, '--->>>'.decode().encode('GBK'))
TreeSum(depth+1, value * 10 + tree.rchild.value, tree.rchild) def RTreeSum(depth, value, tree):
if tree.lchild or tree.rchild:
#import pdb;pdb.set_trace()
if tree.lchild:
print '%sT%s->lchild --->>>' % (depth * '\t', tree.lchild.value)
RTreeSum(depth+1, tree.lchild.value * pow(10, depth) + value, tree.lchild)
if tree.rchild:
print '%sT%s->rchild --->>>' % (depth * '\t', tree.rchild.value)
RTreeSum(depth+1, tree.rchild.value * pow(10, depth) + value, tree.rchild)
else:
print '%s value: %s' % (depth * '\t', value) if __name__ == '__main__':
root = Tree(1)
t2 = Tree(2)
t3 = Tree(3)
t4 = Tree(4)
t5 = Tree(5)
t6 = Tree(6)
t7 = Tree(7)
t8 = Tree(8)
root.lchild = t2
root.rchild = t3
t2.lchild = t4
t2.rchild = t5
t3.lchild = None
t3.rchild = t6
t4.lchild = t7
t4.rchild = None
t6.rchild = t8 print 'Tree Sum:'
TreeSum(0, 1, root) print 'Reverse Tree Sum:'
RTreeSum(1, 1, root)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
其中TreeSum是计算跟节点到叶子节点的数字组合, RTreeSum 是计算叶子节点到根节点的组合
输出结果如下:
Tree Sum:
T1->lchild --->>>
T2->lchild --->>>
T4->lchild --->>>
value: 1247
T2->rchild --->>>
value: 125
T1->rchild --->>>
T3->rchild --->>>
T6->rchild --->>>
value: 1368
Reverse Tree Sum:
T2->lchild --->>>
T4->lchild --->>>
T7->lchild --->>>
value: 7421
T5->rchild --->>>
value: 521
T3->rchild --->>>
T6->rchild --->>>
T8->rchild --->>>
value: 8631
Python实现二叉树的前序遍历、中序遍历的更多相关文章
- Python实现二叉树的前序、中序、后序、层次遍历
有关树的理论部分描述:<数据结构与算法>-4-树与二叉树: 下面代码均基于python实现,包含: 二叉树的前序.中序.后序遍历的递归算法和非递归算法: 层次遍历: 由前序序列.中 ...
- Python实现二叉树的非递归中序遍历
思路: 1. 使用一个栈保存结点(列表实现): 2. 如果结点存在,入栈,然后将当前指针指向左子树,直到为空: 3. 当前结点不存在,则出栈栈顶元素,并把当前指针指向栈顶元素的右子树: 4. 栈不为空 ...
- LeetCode:105_Construct Binary Tree from Preorder and Inorder Traversal | 根据前序和中序遍历构建二叉树 | Medium
要求:通过二叉树的前序和中序遍历序列构建一颗二叉树 代码如下: struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode ...
- 笔试算法题(36):寻找一棵二叉树中最远节点的距离 & 根据二叉树的前序和后序遍历重建二叉树
出题:求二叉树中距离最远的两个节点之间的距离,此处的距离定义为节点之间相隔的边数: 分析: 最远距离maxDis可能并不经过树的root节点,而树中的每一个节点都可能成为最远距离经过的子树的根节点:所 ...
- HDU 1710 (二叉树的前序和中序,求后序)
题目链接 题目大意: 输入二叉树的前序.中序遍历,请输出它的后序遍历 #include <stdio.h> #include <string.h> ; // 长度为n s1 前 ...
- Java实现二叉树的前序、中序、后序遍历(非递归方法)
在上一篇博客中,实现了Java中二叉树的三种遍历方式的递归实现,接下来,在此实现Java中非递归实现二叉树的前序.中序.后序遍历,在非递归实现中,借助了栈来帮助实现遍历.前序和中序比较类似,也简单 ...
- LeetCode二叉树的前序、中序、后序遍历(递归实现)
本文用递归算法实现二叉树的前序.中序和后序遍历,提供Java版的基本模板,在模板上稍作修改,即可解决LeetCode144. Binary Tree Preorder Traversal(二叉树前序遍 ...
- LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++
Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
在上一篇博客中,实现了Java中二叉树的四种遍历方式的递归实现,接下来,在此实现Java中非递归实现二叉树的前序.中序.后序.层序遍历,在非递归实现中,借助了栈来帮助实现遍历.前序和中序比较类似, ...
- 【2】【leetcode-105,106】 从前序与中序遍历序列构造二叉树,从中序与后序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树 (没思路,典型记住思路好做) 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [ ...
随机推荐
- MyBatis之传入参数——parameterType(转)
鸣谢:http://blog.csdn.net/liaoxiaohua1981/article/details/6862764 ------------------------------------ ...
- 递归解析XML
package com.app.test; import java.io.InputStream; import java.util.List; import org.dom4j.Attribute; ...
- ps 命令使用总结
ps命令用来查看进程信息,它是类似于快照类型的只显示一次,如果想及时刷新请用top命令. 1. 常用参数列表 -a 显示所有终端机下执行的进程,除了阶段作业领导者之外. a 显示现行终端机下的所有进程 ...
- sql 复杂自动编号错误批量修改方案
[一篮饭特稀原创,转载请注明出自http://www.cnblogs.com/wanghafan/p/5133953.html] 前提:自动编号为18位,前4位是年份,中间10位是XXXX,最后四位 ...
- iOS开发UI篇—Quartz2D简单使用(一)
iOS开发UI篇—Quartz2D简单使用(一) 一.画直线 代码: 1 // 2 // YYlineview.m 3 // 03-画直线 4 // 5 // Created by apple on ...
- tlplayer for android V2.7(支持变速不变调) 2014-07-20更新
2014-07-20新版本已经修复部分视频倾斜问题,已经更新到服务器,需要的朋友自行下载. 此版本修正了倾斜问题,增加水印等功能.可以动态添加水印. tlplayer for android V2.6 ...
- jquery插件cloud-zoom(放大镜)
效果预览:http://www.helloweba.com/demo/cloud-zoom/ 源代码下载:http://pan.baidu.com/s/1eQnadXo Cloud Zoom是一个图像 ...
- SharePoint 2010 Ribbon的实现
转:http://blog.csdn.net/wang4237/article/details/5306335 SharePoint2010的页面风格发生了很大的改变,其页面风格类似于Office的视 ...
- 未能找到类型或命名空间“Compare”
在用vs2012 .net Framework4.5 Mvc3做一个MVCMusicStore 的例子时,遇到这样一个问题 解决办法: 具体原因也不是很清楚,据说是引用Compare做验证时会有二 ...
- [原]loadrunner中数据库数据参数化
作者:liuheng123456 发表于2013-11-25 14:11:10 原文链接 阅读:228 评论:0 查看评论