Java数据结构(五)树形结构遍历回顾

栈实现后序遍历

1.根入栈,

进入循环,只要栈中有元素就继续

(在循环里不断把右左都压入栈,(提前要弹出一个节点)只要左右不为空,就一直压入栈,那么那个弹出的节点(在两边都不空的情况下)弹出的就是后入的(右子树));

最后头插结果            根

最后头插结果        右    根

最后头插结果    左    右    根

 2.递归的后续与先序遍历

思想:把递归整个树想成 添加一个节点

1.根最后(或者先)

集合add根 

(遍历到最左边)

补充出口:root为null 返回集合;

看 建树;

(红黑树不是自平衡的二叉搜索树)

红黑树是满足红黑性质的二叉搜索树

因为普通二叉树在频繁的增删改查之后容易出现稀疏树的情况,因此引入了红黑树;

红黑树(没用,了解)

:根节点与Nil节点是黑的

:黑高平衡

没有连续的红色节点

添加:

向上分裂:查找位置过程,发现左右都是红色,说明是3key节点,就要向上分裂,左右红变黑,自己黑变红;

找到位置添加:

 修复过程:连续红色节点,或者非左边倾,选择修复:

删除:删除的都是红色节点(不影响黑高平衡),(借节点,父节点兄弟节点)但有可能都是单key节点,为了避免不能分裂,因此在遍历的过程之中要找到借节点的位置,父红变黑,儿黑变红,此时如果left和left都是黑色,就要选择向下分裂,最后借节点

之后再进行修复过程;

是为了每次这样操作都只需要局部修复而不是全局修复;

 

 

--

 

 

 左旋右旋 上下分裂

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值