99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀Python實現(xiàn)二叉樹結(jié)構(gòu)與進行二叉樹遍歷的方法詳解
Python實現(xiàn)二叉樹結(jié)構(gòu)與進行二叉樹遍歷的方法詳解
2017-08-20
收藏

Python實現(xiàn)二叉樹結(jié)構(gòu)與進行二叉樹遍歷的方法詳解

二叉樹是最基本的數(shù)據(jù)結(jié)構(gòu),這里我們在Python中使用類的形式來實現(xiàn)二叉樹并且用內(nèi)置的方法來遍歷二叉樹,下面就讓我們一起來看一下Python實現(xiàn)二叉樹結(jié)構(gòu)與進行二叉樹遍歷的方法詳解.


二叉樹的建立

使用類的形式定義二叉樹,可讀性更好

classBinaryTree:
  def__init__(self, root):
    self.key=root
    self.left_child=None
    self.right_child=None
  definsert_left(self, new_node):
    ifself.left_child==None:
      self.left_child=BinaryTree(new_node)
    else:
      t=BinaryTree(new_node)
      t.left_child=self.left_child
      self.left_child=t
  definsert_right(self, new_node):
    ifself.right_child==None:
      self.right_child=BinaryTree(new_node)
    else:
      t=BinaryTree(new_node)
      t.right_child=self.right_child
      self.right_child=t
  defget_right_child(self):
    returnself.right_child
  defget_left_child(self):
    returnself.left_child
  defset_root_val(self, obj):
    self.key=obj
  defget_root_val(self):
    returnself.key
 
r=BinaryTree('a')
print(r.get_root_val())
print(r.get_left_child())
r.insert_left('b')
print(r.get_left_child())
print(r.get_left_child().get_root_val())
r.insert_right('c')
print(r.get_right_child())
print(r.get_right_child().get_root_val())
r.get_right_child().set_root_val('hello')
print(r.get_right_child().get_root_val())

Python進行二叉樹遍歷

需求:
python代碼實現(xiàn)二叉樹的:
1. 前序遍歷,打印出遍歷結(jié)果
2. 中序遍歷,打印出遍歷結(jié)果
3. 后序遍歷,打印出遍歷結(jié)果
4. 按樹的level遍歷,打印出遍歷結(jié)果
5. 結(jié)點的下一層如果沒有子節(jié)點,以‘N'代替

方法:
使用defaultdict或者namedtuple表示二叉樹
使用StringIO方法,遍歷時寫入結(jié)果,最后打印出結(jié)果
打印結(jié)點值時,如果為空,StringIO()寫入‘N '
采用遞歸訪問子節(jié)點
代碼



#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
# test tree as below:
''' 1 / \ / \ / \ / \ 2 3 / \ / \ / \ / \ 4 5 6 N / \ / \ / \ 7 N N N 8 9 / \ / \ / \ N N N N N N '''
 
fromcollectionsimportnamedtuple
fromioimportStringIO
 
#define the node structure
Node=namedtuple('Node', ['data','left','right'])
#initialize the tree
tree=Node(1,
      Node(2,
         Node(4,
           Node(7,None,None),
           None),
         Node(5,None,None)),
      Node(3,
         Node(6,
           Node(8,None,None),
           Node(9,None,None)),
         None))
#read and write str in memory
output=StringIO()
 
 
#read the node and write the node's value
#if node is None, substitute with 'N '
defvisitor(node):
  ifnodeisnotNone:
    output.write('%i '%node.data)
  else:
    output.write('N ')
 
 
#traversal the tree with different order
deftraversal(node, order):
  ifnodeisNone:
    visitor(node)
  else:
    op={
        'N':lambda: visitor(node),
        'L':lambda: traversal(node.left, order),
        'R':lambda: traversal(node.right, order),
    }
    forxinorder:
      op[x]()
 
 
#traversal the tree level by level
deftraversal_level_by_level(node):
  ifnodeisnotNone:
    current_level=[node]
    whilecurrent_level:
      next_level=list()
      fornincurrent_level:
        iftype(n)isstr:
          output.write('N ')
        else:
          output.write('%i '%n.data)
          ifn.leftisnotNone:
            next_level.append(n.left)
          else:
            next_level.append('N')
          ifn.rightisnotNone:
            next_level.append(n.right)
          else:
            next_level.append('N ')
 
      output.write('\n')
      current_level=next_level
 
 
if__name__=='__main__':
  fororderin['NLR','LNR','LRN']:
    iforder=='NLR':
      output.write('this is preorder traversal:')
      traversal(tree, order)
      output.write('\n')
    eliforder=='LNR':
      output.write('this is inorder traversal:')
      traversal(tree, order)
      output.write('\n')
    else:
      output.write('this is postorder traversal:')
      traversal(tree, order)
      output.write('\n')
 
  output.write('traversal level by level as below:'+'\n')
  traversal_level_by_level(tree)
 
  print(output.getvalue())



數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }